2020版深度回顾小程序跨端开发框架
这一年,小程序在用户规模和商业化方面都取得了巨大成功。微信小程序日活跃用户超过3亿,支付宝、百度、字节跳动小程序月活跃用户也超过3亿。
从小程序开发领域来看,今年也发生了巨大的变化。开发框架已经从简单的微信小程序开发过渡到以多终端框架为标准,进一步提高开发效率成为开发者的强烈需求。
今年mpvue停止更新,Taro探索, uni-app产品和生态不断完善,微信重新上线了kbone框架,支持H5和微信小程序……所以是时候来一波新横评2020版来了。
评估目标筛选
跨端框架是一项投入较大的工作。在各框架长达一年多的竞争中,不少框架因投入不足而逐渐被开发者放弃。 uni-App和taro依靠进一步的重磅投入成为市场主流。
taro基于稳定版本,taro next于近期上线。这两个版本有很大不同,这次将分别进行审核。
所以,本次评测对象(按发表时间排序): 本次评测除了运行表现等实测数据外,还通过框架官网以及Github、掘金、腾讯课堂等三方社区公开收集数据:尽可能多。我们希望为大家提供一个全面的评价依据。 js 和 pikbone框架虽然发布时间不长,但终于由微信正式发布,也有很多人关注,所以这次kbone成为评测对象。 ;当涉及到微信专用的API时,可以功能实现
taro和uni-App是比较典型的可发布的多端框架。而kbone仅支持H5微信小程序。taro和uni-App都封装了通用接口和组件以及跨端API和跨端组件。组件规范遵循微信小程序的规范,以及一些平台特定的API。这两个框架也有解决方案: taro和uni-app可以无限制调用任何小程序平台的所有API和组件。 kbone遵循web的开发习惯,配合7 process.env.isMiniprogram确定环境,然后编写微信原生代码。对于html中没有标签的微信内嵌组件(如swiper),必须为组件打标签或使用wx- 前缀,因此嵌入式组件将被一层自定义组件包裹,这会产生适当的性能开销。
除了接口和组件之外,我们以微信小程序为例,找不同的典型能力来对比框架支持:
| Framework | taro | uni-app 微信自定义组件 3rd partyplugins ⭕️ | ⭕️ | ⭕️❙ | |
|---|---|---|---|---|---|
| ️ | ❌ | ||||
| 云端开发 | ⭕️ | ⭕️ | ⭕️ |
补充说明:如果Taro项目引用了小程序原生的第三方组件,则该项目不再具备多终端转换能力。例如,如果使用了微信小程序的第三方组件,那么该项目只能转换为微信小程序,转换到其他平台就会失效。详情请参阅taro官方网站
App/H5/小程序 所有平台均采用云开发,详情见下文无服务器/云开发章节。 wxs是改善性能体验的重要工具。除了微信小程序的wxs,还有支付宝的SJS和百度erer,这些先进的技术uni -app 完全支持。参考:神秘的wxs,Uni-App如何利用它大幅提升性能测试模型,看看近一年来各种小程序开发框架的性能是否有所提升。详细内容如下:
- 开发内容:开发模仿微博小程序首页的复杂长列表,支持下拉刷新、上拉翻页、点赞等。
- 界面如下:
![]()
- 开发版本:共开发了5个版本,包括微信原生版、taro版、Uni-App版、kbone版。根据官网指南,默认使用
cli方法安装它们。 - taro 目前的稳定版本是 2.0 版本,但最近正在推广跨框架 taro next,所以我们基于相同的反应代码测试了 taro 2.0 和 taro next 版本的数据。
- 测试代码开源(Github仓库地址:https://github.com/dcloudio/test-framework),
提示:如果同学认为测试代码写得不正确,请发送PR或Issus测试机型:Redmi 6 Pro、MIUI 11.0.5稳定版(最新版本)、微信版本7.0.12(最新版本) 我们以上面的仿微博小程序为例,测试一下容易出现性能问题的两个点:长列表加载和大量相似组件的响应。 模仿微博的列表是一个包含很多组件的列表。这个复杂的列表对性能带来了更大的压力,非常适合性能测试。 从上拉加载触发到数据更新、页面渲染完成,需要精准的时序。人类视觉计时肯定是不可能的。我们用程序埋点,制定如下时序时序: 提示: 测试方法:从页面空列表开始,程序自动触发上拉加载,每添加20次,记录单次使用时间;以固定的时间间隔连续触发N次上拉加载,使得页面达到20*N个列表时,计算从触发上拉到完成渲染的平均时间。 测试结果如下: 说明:以400条微博列表为例,从页面空列表开始,每1秒触发一次上拉加载(新增20条微博) ),并记录单次耗时,触发20次后停止(页面达到400条微博),并计算这20次的平均耗时。结果微信原生这20次 当你第一次看到这个数据时,你可能会感到困惑。别担心,下面有详细介绍。注 注1:为什么taro Next/kbone测试数据不完整? 因为 超出 dom 限制,请参阅是否是你犯的错误 另外,kbone官网有如下介绍: kbone用一定的表演功能损失来换取更多的网页支持。 如果你的申请是长名单场景,那么 解释2:为什么测试数据显示Uni应用的性能比微信原生框架略好? 这个问题在去年的评测中已经得到了解释。为了避免新同学混淆,这里再解释一下。 微信原生框架耗时的部分主要在 比如当前页面有20条数据。当触发上拉加载时,加载20位数据。此时如果原生框架通过下面的代码测试, 开发如果使用微信原生框架,可以自己优化传输,简化传输。每次仅传输20条变化数据)。例如更改如下: 经过上述优化更改后,再次测试,微信原生框架的性能数据如下: 从测试结果可以看出: 此结果与 正是因为 解释3:为什么今年的性能测试数据与去年不同? 细心的同学会注意到,同样的测试手机、同样的测试代码,为什么今年的性能数据相比去年的数据有明显的提升呢? 事实上,通过对比微信原生工程师的数据,我们可以得出这样的结论:2019年,微信在小程序运行时做了一些明显的性能优化。 这对于开发者来说应该是好消息。小程序拥有更好的性能体验,能够承载更好的用户服务。 复杂长列表加载下一页评测结论:微信原生开发(手动优化)~ 长列表中的某个组件,比如组件,无法及时点击?这是本次测试的评价点。 测试方法: 在红米手机(红米6 Pro)上运行不同的测试并找到平均值。结果如下: 描述:也就是说,当列表数量为 400 时,对于微信原生开发的应用,点赞按钮从点击到状态变化需要 26 毫秒。 测试结果数据说明: 组件数据更新 性能评估: n > > 综上,我有2性能测试。测试、长列表加载和组件状态更新。综合2次实验,结论如下: 微信原生开发(手动优化)~ 双方都有很多大厂商的案例, taro开发者必须搭建自己的iOS/Android开发环境,相对繁琐。 (官方原文地址): 使用跨平台开发的核心诉求是提高效率。当一个App的开发是由前端、iOS、Android三组工程师协作完成时,效率其实是很低的。 此外, taro的H5平台在过去的一年里取得了很大的进步,可用性得到了很大的提高。但相比 然而,快应用的发展在2020年发生了一些变化。 ): 跨终端开发离不开条件编译。因为统一不能用来消除各个平台的特点。 优秀的条件编译能力对于端到端的开发灵活性至关重要,让开发者能够轻松地在共享和定制之间切换。 跨端支持总结结论: 相比微信原生,这三个开发框架的开发体验更好。 但就开发工具而言,明显优越的框架是 开发体验维度,对比结果: 无服务器是目前的热门概念。被称为下一代云技术,是真正的“云”。 微信率先将Serverless技术引入小程序开发领域,即云开发,帮助开发者在云端完成业务。之后,支付宝和百度也推出了自己的云开发。根据微信公开数据,已有50万开发者在使用微信云进行开发。 然而,小程序厂商主导的云开发有一个天然的局限性,那就是与平台绑定太紧密,无法与其他平台共享数据。 我们以微信云开发为例。如果你只开发微信小程序,数据专门存储在微信平台上,这不是问题;但如果您还有应用程序或其他小程序,此时微信小程序的数据会被保存。在微信平台上,其他平台的数据存储在开发者自己的服务器上,此时就会出现数据碎片。假设用户首先使用小程序,其个人数据存储在微信平台上;然后在获得粘性后升级到应用程序。此时,App无法读取微信平台上的数据,用户也无法在小程序中看到之前的历史数据,甚至需要在App平台上重新注册。这种情况对于开发商来说是有害的。 因此,跨端Serverless方案是开发者的最优方案。 目前支持云开发的主流框架: 在Serverless维度, 一个开发框架是否成功,不仅取决于框架本身的产品化程度高低,还取决于开发者生态的构建。 除了各大框架的官网之外,开发者通常还会通过视频教程、社区博客等进行系统学习。因此我们从各个第三方网站收集了数据。视频教程 除了介绍资源之外,开发期间的沟通也很重要。所以我们主要看官方组织的社区和交流群。 对于习惯使用github topic报告问题的用户, Taro早期有基于Github问题的产品bug管理。目前有近4898个问题。后来,开发者社区于2019年5月上线,与素材市场同时上线。目前有 1300+ 条帖子,每天大约有 10 条更新帖子,相关数据计算方法如下: kbone微信公开新增Kbone官方小队专区社区。由于产品发布较晚,目前只有一百多个帖子。 汇总社区帖子和广播数据,情况如下(采集时间为2020.04.03 23:00): Taro有16条微信小贴士基于群衍生Taro官网上显示 除了交流群之外,DCloud还向公众宣布 总体来说,开发沟通维度的对比结果如下: 在开源社区方面, 通过index.baidu.com,可以看到主流框架的搜索指数,它代表了网友的搜索量以及相似文章的收录情况。目前,加载长列表
setData页面渲染完成时即可完成回调函数的开始。 ,因为微信setData定义如下(微信规范): ![]()
![]()
触发上拉->渲染完成平均耗时538毫秒,最快的❀秒,最慢的kbone是4057毫秒taro下一个和kbone使用动态数的解,如果解很多dom 节点将大幅增加,甚至超过微信的dom节点数量限制(警报信息如下)。我们在红米手机(红米6 Pro)上进行了测试。当页面组件数量超过600个时,taronext、kbone实现的仿微博应用报屏,因此白屏停止这两个测试框架中的组件,测试数据不完整。这意味着如果页面组件太多,这两个框架就无法使用。 taro接下来、kbone的测试数据明显和2一样。 、 不是来自同一应用程序尺寸。 taro下一个、kbone显然不适合。 ,每次只传输变化的数据。 setData调用。如果开发者不单独优化的话,每次都会传输大量的数据;和 uni-App、taro 自动运行diff计算setData setData会传输40条数据data: {
listData: []
},
onReachBottom() { //上拉加载
let listData = this.data.listData;
listData.push(...Api.getNews());//新增数据
this.setData({
listData
}) //全量数据,发送数据到视图层
}data: {
listData: []
},
onReachBottom() { //上拉加载
// 通过长度获取下一次渲染的索引
let index = this.data.listData.length;
let newData = {}; //新变更数据
Api.getNews().forEach((item) => {
newData['listData[' + (index++) + ']'] = item //赋值,索引递增
})
this.setData(newData) //增量数据,发送数据到视图层
}![]()
uni-App与微信原生相比,性能接近,是一个数量级; a 随着数据量的增加,性能消耗并没有明显增加。从438到454,只有16毫秒的变化taro 2.0随着数据量的增加,性能消耗增加,从595到790,有近200毫秒的变化; taro下和kbone相比起来就比较大了。 web 开发类似。 web开发还包括原生js开发,view,的情况,如果不进行特殊优化,原生js编写的网站性能往往不太好作为 view 和 react 的性能。 View和react的优秀、良好的性能和良好的开发经验,才被逐渐少用。uni-app>微信原生开发(未手动优化)~2.0年>taroned >kboneiar 组件响应速度onclick功能,setData End 回调函数开始时的计时; ![]()
uni-app ~ taro 2.0 > kboneuni-app>微信原生开发(未优化)❙D)0taronext > kbone跨端支撑或旨在解决所有平台。需要进行跨端比较。
taro和uni-app相对成熟,支持所有主流平台。kbone仅支持微信小程序和网页。我们重点比较taro和uni-App。 小程序平台
taro和uni app都支持微信、支付宝、Basely功能相同,支付宝、Baiance、Basely。 taro有京东、货拉拉、淘票票等公司的小程序案例,uni有腾讯、华为、vivo、联想、中国人才网等公司小程序案例。 应用平台
taro与微信小程序引擎契合度较低,很多功能需要开发者在iOS和Android上进行原生开发。比如taro就没有封装app页面常见的三方登录、支付、分享等能力。 uni-App提供了丰富的基础引擎层面的能力和丰富的插件市场,可以有效提高开发者的效率。 taro在应用端使用了react native渲染引擎。渲染层虽然是UI原生的,但在实时交互和响应要求较高的UI操作中表现良好。总是很差劲,js层和view层之间失去了沟通,让很多开发者无能为力。uni-app的应用引擎还为开发者提供了原生渲染引擎和小程序引擎的双重选择,并且由于renderjs技术的发明以及对wxs、BindingX等技术的支持,解决了这个问题js层和view层的通信丢失问题,在响应要求高的UI操作中提供了更好的性能。比如这种画布动画:![]()
uni-App可以做到前端开发者不依赖原生工程师独立完成App。它开发的小程序可以更容易地转换成商业应用程序。 uni-App还提供Uni Applet SDK。这个工具可以帮助原生App快速搭建自己的小程序平台。这是其他框架不提供的。 H5平台
uni-app,它仍然缺乏对wxs和小程序组件的支持。 快应用
taro早于uni-App支持快应用。 跨终端灵活性
taro、uni-app和kbonejs 代码通过process.env确定平台,然后编写平台特定的代码..taro还支持统一接口的多端文件编码方式,以及在样式文件中使用ifdef条件编译。 uni-App 完全可以有条件编译。目录、文件、配置、组件、js、css,一切都可以通过ifdef进行条件编译。 uni-app>taro❀开发经验tarouni-appkbone支持所有cli工具,可以主流模式开发。图书馆。所有三个框架都支持主流的 vue或react语法。支持的IDE工具链丰富且完整,包括颜色、验证和格式化。 uni-app。他的制作公司也是HBuilderX、DCloud.io的制作公司。 HBuilderX uni-app 做了很多优化包括代码提示、转到定义、easycom、运行调试……是其他框架无法比拟的。 uni-app>taro,,Serverless /云开发uni-app明显领先于其他框架。 插件市场
uni-app于2018年底率先上线插件市场。支持前端组件、js sdk、页面模板、项目模板、原生插件等类型,并提供认可、付费购买等手段来激励轮子作者。创作热情。目前,市场上已发布插件近1500个,不少插件下载量超过10000次。 Taro于2019年5月在材质市场上线。目前已有90种材料上市;从热门榜单来看,下载量并不大,下载最多的也只有几百个。 kbone目前没有外挂市场。 ? 学习资源
开发沟通
社区论坛
uni-app是一个问答社区,帖子丰富,积累多;它收集了超过20,000个相关帖子,每天更新数百个帖子,每月有数百万个UV。 uni-app也支持。目前共有 1391 个问题。 部分 ,并计算每个部分下所有科目的总数,如下所示。 ![]()
![]()
交流群
框架部队QQ群 沟通小组发展(估计) taro 16 - 8k uni-App 20 40+0敖明 - 1 0.5k Taro的发展通讯15组已满。每个微信群500人,交流群人数为:500*16=8000人 uni app的开发者数量已达百万。我们还没有看到taro和kbone发布这样的数据。uni-app > taro o Ming 其他指标githubstar贡献者 taro 24.6k 122 kbone 2.7k 7 Taro还是很成功的。它吸引了更多的开发者为其贡献代码和文档。 百度指数
kbone尚未纳入百度索引。以下是近期uni-App和taro的百度指数对比图:❀ee作为决策依据,最终结果还是取决于开发者团队的技术栈、业务需求、未来计划等。而且不懂Vue.js,我推荐Taro;
版权声明
本文仅代表作者观点,不代表Code前端网立场。
本文系作者Code前端网发表,如需转载,请注明页面地址。
code前端网


发表评论:
◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。