抛开uni-app可以开发多端,而5+App只能开发App不谈。本文只谈仅做App的情况下,uni-app的App和5+App有什么区别。

5+App是DCloud上一代产品,基于webview扩展的混合开发技术。
它的每个页面都是一个webview加载一个html页面,调用原生扩展能力时通过webview的桥通信实现。
5+App可以满足常规App的开发,并且基于html开发比较简答。但距离第一流互联网体验要求的App而言,5+App难以满足这种要求。

于是DCloud新出了uni-app。
uni-app引入了独立的jscore,逻辑层和视图层分离,并且视图层支持Webview渲染和nvue原生渲染的双渲染引擎,开发者可以做出更高性能和体验的App。

uni-app比5+App的改进具体包括:

引用独立的js引擎,将逻辑层和视图层分离,用多线程解决卡顿问题

webview是单线程的,不管多少个webview,它们的js跑在同一个线程里,会互相影响。js即运行逻辑,又操作页面渲染,经常会阻塞。

引入独立的js引擎(jscore)后,由单线程变成双线程。将逻辑层和视图层分离,逻辑层运行在jscore里,视图层仍然在webview里,可以大幅提升页面加载体验。

比如新页面动画进入时,在5+App里,需要先打开一个新webview,然后这个webview里的js代码去联网下载数据,下载数据后填充到页面,这样等待时间会很长。
但在uni-app里,打开新页面时,联网是在始终都存在的jscore里进行了,同时另一个线程打开了视图层的webview页面,它们双线程并行工作而不是串行,所以新页面内容加载非常快。

5+App要想加快新页面速度,往往需要做预载。这增加了内存占用和代码复杂度。uni-app无需预载,可以快速加载新页面。

当然引入独立的jscore也会有代价,就是Android包体积增加,一个Android的js引擎大约7M的体积。iOS由于系统自带jscore,不需要新增js引擎体积。

双线程还有一个负面问题是两个线程之间通信是需要时间的,高频通信不能像在webview里那样自由写代码,需要依靠uni-app提供的renderjs方案来解决这类问题。(react native也有这类阻塞问题,但它没有解决方案,不如uni-app)

支持原生渲染

5+App是webview渲染的,而uni-app是双渲染引擎可选。nvue原生渲染支持带来大量的好处,由于内容较多,本文不列举,请另行参考:nvue使用指南

原生插件系统改进和生态区别

5+App是基于Webview的js桥通信和原生能力对接的,这种做法,需要在原生层和js层编写大量代码才能互相对接起来。
uni-app是jscore和原生能力对接的,此时原生插件编写,主要是写原生代码,插件开发工作量大幅减少、插件使用也变的更加方便。
DCloud已经淘汰了5+App的原生插件扩展模式,并且为uni-app建立了插件市场。
所以uni-app有丰富的原生插件生态,这对开发者很重要。选择5+App将无法享受这种生态。

底部选项卡的逻辑

5+App的启动逻辑,是先打开lauchWebview,然后由这个Webview加载页面内容和逻辑,包括创建底部选项卡。每个选项卡都是一个Webview,以父子Webview嵌套方式排版。整个应用的启动速度和内存占用都比较高。
在uni-app里,App启动时是原生先根据pages.json描述绘制底部选项卡,这个速度是非常快的。并同时打开jscore,jscore的启动时间也比Webview快很多。不同的选项卡的Webview不是父子嵌套,渲染压力和内存占用都要好很多。

软键盘优化

  • Android软键盘底部灰一下的问题
    5+App的软键盘,在Android上,弹出和收起时,底部会灰一下,因为键盘移动的速度很快,而Webview的大小调节速度没那么快。
    uni-app里则没有这个问题。
  • 软键盘右下角按钮自定义问题
    Webview里的软键盘,右下角按钮无法自定义为“发送”。uni-app通过提供nvue原生渲染解决了这个问题。

区域滚动长列表的体验和自定义下拉刷新问题

Webview的页面超长滚动没有问题,但区域想要长列表滚动就性能非常差了。
这需要uni-app的nvue里的list组件或recycle-list组件来解决。没有这种技术,很多优秀的交互做不出来,比如可吸顶、可左右滚动的区域长列表。
包括区域长列表的自定义下拉刷新,也无法在5+App的框架下给出高性能的方案,还是需要nvue的refresh组件。

同屏多Webview的内存消耗

5+App里经常需要做Webview的嵌套或同屏覆盖:

  1. 比如要盖住map等原生组件,就需要再创建一个webview去盖住它。
  2. 比如左右拖动的顶部选项卡+长列表,需要创建多个webview形成webview group才能保证体验。
    这些做法非常占用内存,并且屏幕渲染时要处理的逻辑非常多,导致渲染变慢。
    uni-app里完全没有同屏多webview并存的现象,它通过nvue来解决上述问题,一个nvue页面的内存占用要比一个webview的内存占用小太多了。

WKWebview的坑

由于Apple废弃了灵活的UIWebview,强推WKWebview,这对传统混合开发的应用造成了很大的限制。
WKWebview的跨域问题让人非常烦恼,内存不足时自动单屏崩溃(白屏)问题更是无解。
uni-app的js由于运行在jscore而不是WKWebview里,所以不存在这些问题。

uni统计

uni-app同时配套了一个强大的uni统计系统,https://tongji.dcloud.net.cn/。
uni统计可以免打点统计非常多内容,是运维的好帮手。

技术支持和社区生态

uni-app有十几万人的官方QQ群/微信群,各个群都活跃。网络上的视频教程、经验分享也更多。
5+App的使用人数比uni-app少很多,交流群活跃程度、资料丰富度都不及uni-app。

5+App的优势

虽然uni-app优于5+App很多,但5+App也有一些优势:

  1. 入门简单:uni-app要求开发者必须掌握vue。而5+App只需要会html即可。
  2. 包体积小,Android不需要引入7M的独立js引擎。不管Android还是iOS都不需要引入1M的uni-app基础组件框架
  3. 5+app的Android最低版本支持到2.3、iOS最低支持7。而uni-app的Android最低是4.4、iOS最低9。事实上Android4.4是2013年发布的,更低版本的手机在市场上基本没有市占率了。

所以DCloud的建议是,除非你只会html但不会vue,也不想学vue,且对App的性能体验要求不高,不需要扩展原生能力,或者必须要支持Android4.4以下的手机,那么可以使用5+App。其他场景则应该使用uni-app。

5+App和uni-app在App开发上有何区别?相关推荐

  1. article.app.php,【求助】修改app\portal\AdminArticle.php二次开发提交数据出错的疑问

    [求助]修改app\portal\AdminArticle.php二次开发提交数据出错的疑问 在使用thinkcmf的portal模块进行二次开发,需要对文章栏目分离管理,我复制了article的PH ...

  2. h5外卖源码php_校园食堂外卖APP走红 更多APP定制开发上一品威客网

    近日,西安一高校推出了一款校园食堂外卖APP走红网络.该APP涵盖学校食堂的所有饭菜,并可给该校的师生提供校园食堂饭菜外卖服务.饭菜价格与食堂统一,且仅供该校内的师生使用. 目前开发校园外卖订餐系统可 ...

  3. 安卓开发由一个APP拉起另一个APP的方法总结

    安卓开发由一个APP拉起另一个APP的方法总结 最近公司在对接第三方应用的时候有两个需求:1.要由我们的客户端拉起第三方的客户端,并且传值.2.要让第三方客户端能够拉起我们的客户端,并可以根据传递过来 ...

  4. 开发安卓app游戏_「安卓APP开发流程」安卓APP如何开发的?

    21世纪,智能手机走进了人们的生活,现在的智能手机的操作系统基本分为两种,一种是IOS系统(苹果系统).安卓系统,其中,安卓系统是开源的,所以很多品牌商会讲安卓包装成自己的系统,但核心还是一样的,都是 ...

  5. 苹果iOS App上架流程,非iOS开发人员上架教程

    iOS应用上线发布流程一般包含相关证书文件的配置.Xcode的设置.App Store Connect填写App的相关信息.ipa包上传.审核结果以及相关邮件回复.相关证书文件的配置与Xcode的设置 ...

  6. 鸿蒙系统,鸿蒙app简易登录界面,界面开发教程

    鸿蒙系统,鸿蒙app简易登录界面,界面开发教程. // 这个是主Ability public class MainAbilitySlice extends AbilitySlice {@Overrid ...

  7. 分销APP联盟商家入驻商城系统开发

    分销APP联盟商家入驻商城系统开发,分销APP联盟商家入驻商城系统软件(陈琦:138-2848-7919可微)分销APP联盟商家入驻商城系统平台,分销APP联盟商家入驻商城系统模式,APP分销联盟商家 ...

  8. html6能代替原生app,网页转APP工具能否取代原生APP?这个在线制作平台,让移动开发更简单...

    近期,知名的站长之家论坛关闭,朋友圈一片感慨:一个时代已经结束了. 在传统的PC互联网时代,全国各地的论坛BBS风起云涌,知名的就有天涯论坛.猫扑论坛等,还有数不清的垂直领域论坛.很多个人站长也经历了 ...

  9. php开发的app商城,如何利用PHP语言开发手机APP

    如何利用PHP语言开发手机APP 一般的PHP框架都可以用来做app后台服务器.因为原理上客户端从你这边拿的都是字符串数据,所以就算你不用框架也没有问题,不过会引发后续的问题.PHP提供API给客户端 ...

最新文章

  1. 耗时3天,上亿数据如何做到秒级查询?
  2. Nature子刊:吃得越少,活得越久
  3. 2-Authentication Framework Chain of Trust
  4. pe usb驱动导入工具_如何使用微PE系统重装系统?
  5. 5种较为简单的缺失值处理方法
  6. python画方波_numpy绘制方波及方波无穷级数的表示
  7. 初二物理模型有哪些_暑假新初二、新初三的数学该怎么学,教辅怎么买,题该怎么刷?看这里~...
  8. .NET开发Silverlight程序:界面和对象模型
  9. 多线程中的事务回滚,你真的用对了吗?
  10. C# 10 的五大新功能
  11. 多线程等待/通知机制
  12. .Net操作Office总结一 - 使用VS2010自带的Office模板进行开发
  13. 网络编程学习笔记之TCP_01(帅帅老师讲堂)
  14. Java程序编写 • 【第4章 程序:随机本周菜品;简易计算器】
  15. 陈强教授《机器学习及R应用》课程 第十七章作业
  16. 不属于计算机主机设备的是什么,以下不属于外部设备的是( )。 A.输入设备 B.中央处理器和主存储器 C.输出设备 D.外存储器...
  17. python对律师的作用_一场官司中律师的作用有多大?
  18. 亚马逊日本站好不好做?怎么选品?有什么注意事项?
  19. FIT2CLOUD飞致云荣膺“2022年度OSCHINA优秀开源技术团队”奖项
  20. linux的定时重启命令

热门文章

  1. matlab 两个txt文件的合并。。
  2. Python-玩转数据-python网络编程
  3. 用 texstudio, 外部 pdf 浏览器查看可以正常显示中文, 但是内置的 pdf 浏览器不能显示中文?
  4. 服务器和交换机物理连接_服务器与交换机连接及校园网搭建方案
  5. 机器人RobotCali数据集解读
  6. 设计一个名为 MyRectangle 的矩形类来表示矩形
  7. 伸缩自如的ElasticSearch——通过bboss操作和访问elasticsearch模式
  8. c语言结构体冒泡排序,c语言结构体冒泡排序求教
  9. Unity设置字体颜色渐变
  10. 【转载】给程序员的圣诞礼物★★秋冬