Code前端首页关于Code前端联系我们

2020版深度回顾小程序跨端开发框架

terry 2年前 (2023-09-22) 阅读数 85 #移动小程序

这一年,小程序在用户规模和商业化方面都取得了巨大成功。微信小程序日活跃用户超过3亿,支付宝、百度、字节跳动小程序月活跃用户也超过3亿。

从小程序开发领域来看,今年也发生了巨大的变化。开发框架已经从简单的微信小程序开发过渡到以多终端框架为标准,进一步提高开发效率成为开发者的强烈需求。

今年mpvue停止更新,Taro探索, uni-app产品和生态不断完善,微信重新上线了kbone框架,支持H5和微信小程序……所以是时候来一波新横评2020版来了。

评估目标筛选

跨端框架是一项投入较大的工作。在各框架长达一年多的竞争中,不少框架因投入不足而逐渐被开发者放弃。 uni-Apptaro依靠进一步的重磅投入成为市场主流。

taro基于稳定版本,taro next于近期上线。这两个版本有很大不同,这次将分别进行审核。

kbone框架虽然发布时间不长,但终于由微信正式发布,也有很多人关注,所以这次kbone成为评测对象。

所以,本次评测对象(按发表时间排序):

  • 微信原生开发
  • taro,京东实验室出品,官网地址:https://taro.jd.com/
  • Uni-App,DCloud出品,官网地址:https://uniapp.dcloud.net.cn
  • kbone,腾讯微信团队出品,官网地址:https://wechat-miniprogram.github .io/kbone/docs/

本次评测除了运行表现等实测数据外,还通过框架官网以及Github、掘金、腾讯课堂等三方社区公开收集数据:尽可能多。我们希望为大家提供一个全面的评价依据。

功能实现

tarouni-App是比较典型的可发布的多端框架。而kbone仅支持H5微信小程序。

tarouni-App都封装了通用接口和组件以及跨端API和跨端组件。组件规范遵循微信小程序的规范,以及一些平台特定的API。这两个框架也有解决方案:

  • taro:支持与小程序代码混合编写,可以通过混合编写为框架未加密的小程序调用新的 API
  • uni-app:支持条件编译,分别是在条件编译代码块中找到,您可以从任何平台自由调用新的API和组件。

tarouni-app可以无限制调用任何小程序平台的所有API和组件。

kbone遵循web的开发习惯,配合

7

js 和 pi

;当涉及到微信专用的API时,可以process.env.isMiniprogram确定环境,然后编写微信原生代码。对于html中没有标签的微信内嵌组件(如swiper),必须为组件打标签或使用wx- 前缀,因此嵌入式组件将被一层自定义组件包裹,这会产生适当的性能开销。

除了接口和组件之外,我们以微信小程序为例,找不同的典型能力来对比框架支持:

Frameworktarouni-app 微信自定义组件 3rd partyplugins ⭕️⭕️⭕️❙
云端开发⭕️⭕️ ⭕️

补充说明:如果Taro项目引用了小程序原生的第三方组件,则该项目不再具备多终端转换能力。例如,如果使用了微信小程序的第三方组件,那么该项目只能转换为微信小程序,转换到其他平台就会失效。详情请参阅taro官方网站

  • uni-app。如果您在Uni App中使用微信自定义组件,支持编译分发到App/H5/微信小程序/QQ小程序。 4个平台,请查看uni app官网详情
  • taro不支持wxs原因:#2959
  • kbone不支持微信第三方插件原因:#58;不支持wxs的原因:#129
  • 云开发微信平台上,三个框架都支持,但taro/kbone只支持微信小程序平台。 Uni app 支持 App/H5/小程序 所有平台均采用云开发,详情见下文无服务器/云开发章节。
  • wxs是改善性能体验的重要工具。除了微信小程序的wxs,还有支付宝的SJS和百度erer,这些先进的技术uni -app 完全支持。参考:神秘的wxs,Uni-App如何利用它大幅提升性能测试模型,看看近一年来各种小程序开发框架的性能是否有所提升。详细内容如下:

    • 开发内容:开发模仿微博小程序首页的复杂长列表,支持下拉刷新、上拉翻页、点赞等。
    • 界面如下:

    小程序跨端开发框架深度横评之2020版

    • 开发版本:共开发了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(最新版本)

  • 测试环境:在开始测试每一帧之前,杀掉所有app进程并删除内存,保证测试机环境基本一致;每次都在本地读取静态数据,以保护网络差异。
  • 我们以上面的仿微博小程序为例,测试一下容易出现性能问题的两个点:长列表加载和大量相似组件的响应。

    加载长列表

    模仿微博的列表是一个包含很多组件的列表。这个复杂的列表对性能带来了更大的压力,非常适合性能测试。

    从上拉加载触发到数据更新、页面渲染完成,需要精准的时序。人类视觉计时肯定是不可能的。我们用程序埋点,制定如下时序时序:

    • 时序开始时序:交互事件触发,在帧任务之前,如:上拉加载(onReachBottom)函数开始
    • 计时结束时间:页面渲染完成(微信setData回调函数的开始)

    提示:setData页面渲染完成时即可完成回调函数的开始。 ,因为微信setData定义如下(微信规范):

    小程序跨端开发框架深度横评之2020版

    测试方法:从页面空列表开始,程序自动触发上拉加载,每添加20次,记录单次使用时间;以固定的时间间隔连续触发N次上拉加载,使得页面达到20*N个列表时,计算从触发上拉到完成渲染的平均时间。

    测试结果如下:

    小程序跨端开发框架深度横评之2020版

    说明:以400条微博列表为例,从页面空列表开始,每1秒触发一次上拉加载(新增20条微博) ),并记录单次耗时,触发20次后停止(页面达到400条微博),并计算这20次的平均耗时。结果微信原生这20次触发上拉->渲染完成平均耗时538毫秒,最快的❀秒,最慢的kbone是4057毫秒

    当你第一次看到这个数据时,你可能会感到困惑。别担心,下面有详细介绍。注

    注1:为什么taro Next/kbone测试数据不完整?

    因为taro下一个kbone使用动态数的解,如果解很多dom 节点将大幅增加,甚至超过微信的dom节点数量限制(警报信息如下)。我们在红米手机(红米6 Pro)上进行了测试。当页面组件数量超过600个时,taronextkbone实现的仿微博应用报屏,因此白屏停止这两个测试框架中的组件,测试数据不完整。这意味着如果页面组件太多,这两个框架就无法使用。

    超出 dom 限制,请参阅是否是你犯的错误

    另外,kbone官网有如下介绍:

    kbone用一定的表演功能损失来换取更多的网页支持。

    taro接下来kbone的测试数据明显和2一样。 、 不是来自同一应用程序尺寸。

    如果你的申请是长名单场景,那么taro下一个kbone显然不适合。

    解释2:为什么测试数据显示Uni应用的性能比微信原生框架略好?

    这个问题在去年的评测中已经得到了解释。为了避免新同学混淆,这里再解释一下。

    微信原生框架耗时的部分主要在setData调用。如果开发者不单独优化的话,每次都会传输大量的数据;和 uni-Apptaro 自动运行diff计算setData

    ,每次只传输变化的数据。

    比如当前页面有20条数据。当触发上拉加载时,加载20位数据。此时如果原生框架通过下面的代码测试,setData会传输40条数据

    data: {
        listData: []
    },
    onReachBottom() { //上拉加载
        let listData = this.data.listData;
        listData.push(...Api.getNews());//新增数据
        this.setData({
            listData
        }) //全量数据,发送数据到视图层
    }

    开发如果使用微信原生框架,可以自己优化传输,简化传输。每次仅传输20条变化数据)。例如更改如下:

    data: {
        listData: []
    },
    onReachBottom() { //上拉加载
        // 通过长度获取下一次渲染的索引
        let index = this.data.listData.length;
        let newData = {}; //新变更数据
        Api.getNews().forEach((item) => {
            newData['listData[' + (index++) + ']'] = item //赋值,索引递增
        }) 
        this.setData(newData) //增量数据,发送数据到视图层
    }
    
    本段代码来自 https://www.codeqd.com/post/2023091214.html

    经过上述优化更改后,再次测试,微信原生框架的性能数据如下:

    小程序跨端开发框架深度横评之2020版

    从测试结果可以看出:

    • 手动优化后对于开发者来说,微信原生框架可以获得更好的性能;
    • uni-App与微信原生相比,性能接近,是一个数量级; a 随着数据量的增加,性能消耗并没有明显增加。从438到454,只有16毫秒的变化
    • taro 2.0随着数据量的增加,性能消耗增加,从595到790,有近200毫秒的变化;
    • taro下kbone相比起来就比较大了。

    此结果与web 开发类似。 web开发还包括原生js开发,view的情况,如果不进行特殊优化,原生js编写的网站性能往往不太好作为viewreact 的性能。

    正是因为Viewreact的优秀、良好的性能和良好的开发经验,才被逐渐少用。

    解释3:为什么今年的性能测试数据与去年不同?

    细心的同学会注意到,同样的测试手机、同样的测试代码,为什么今年的性能数据相比去年的数据有明显的提升呢?

    • taro、uni-App和微信原生,三个框架的数据都有了很大的提升。如果有400条记录,至少优化了300毫秒
    • uni app和优化的微信原生,随着数据量的增加,耗时数据的变化并不明显,但去年是非常明显的线性增长

    事实上,通过对比微信原生工程师的数据,我们可以得出这样的结论:2019年,微信在小程序运行时做了一些明显的性能优化。

    这对于开发者来说应该是好消息。小程序拥有更好的性能体验,能够承载更好的用户服务。

    复杂长列表加载下一页评测结论:微信原生开发(手动优化)~uni-app>微信原生开发(未手动优化)~2.0年>taroned >kboneiar 组件响应速度

    长列表中的某个组件,比如组件,无法及时点击?这是本次测试的评价点。

    测试方法:

    • 选择一个Wibo,点击“喜欢”按钮可以改变喜欢状态,喜欢,灰色喜欢,灰色不喜欢),onclick功能,setData End 回调函数开始时的计时;

    在红米手机(红米6 Pro)上运行不同的测试并找到平均值。结果如下:

    小程序跨端开发框架深度横评之2020版

    描述:也就是说,当列表数量为 400 时,对于微信原生开发的应用,点赞按钮从点击到状态变化需要 26 毫秒。

    测试结果数据说明:

    • taroNext/kbone测试数据不完整原因同上。如果组件较多,则页面不再渲染。这也是动态运行框架造成的。

    组件数据更新 性能评估:uni-app ~ taro 2.0

    n

    > > kbone

    综上,我有2性能测试。测试、长列表加载和组件状态更新。综合2次实验,结论如下:

    微信原生开发(手动优化)~uni-app>微信原生开发(未优化)❙D)0

    > taronext > kbone

    跨端支撑或旨在解决所有平台。需要进行跨端比较。

    tarouni-app相对成熟,支持所有主流平台。kbone仅支持微信小程序和网页。我们重点比较tarouni-App

    小程序平台

    tarouni 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操作中提供了更好的性能。比如这种画布动画:

    小程序跨端开发框架深度横评之2020版

    • 在开发体验上

    taro开发者必须搭建自己的iOS/Android开发环境,相对繁琐。 (官方原文地址):

    uni-App可以做到前端开发者不依赖原生工程师独立完成App。它开发的小程序可以更容易地转换成商业应用程序。

    使用跨平台开发的核心诉求是提高效率。当一个App的开发是由前端、iOS、Android三组工程师协作完成时,效率其实是很低的。

    此外,uni-App还提供Uni Applet SDK。这个工具可以帮助原生App快速搭建自己的小程序平台。这是其他框架不提供的。

    H5平台

    taro的H5平台在过去的一年里取得了很大的进步,可用性得到了很大的提高。但相比uni-app,它仍然缺乏对wxs和小程序组件的支持。

    快应用

    taro早于uni-App支持快应用。

    然而,快应用的发展在2020年发生了一些变化。 ):

    • quickapp-vue版本:使用Vue快速开发应用程序。该方案由小米主导,但目前不支持华为快应用。
    • 快应用轻量版:基于小程序架构的快应用(轻量版),详情参见https://www.hellohub.cn。该方案由华为运营,但小米快应用尚不支持。

    跨终端灵活性

    跨终端开发离不开条件编译。因为统一不能用来消除各个平台的特点。

    优秀的条件编译能力对于端到端的开发灵活性至关重要,让开发者能够轻松地在共享和定制之间切换。

    tarouni-appkbonejs 代码通过process.env确定平台,然后编写平台特定的代码..

    taro还支持统一接口的多端文件编码方式,以及在样式文件中使用ifdef条件编译。

    uni-App 完全可以有条件编译。目录、文件、配置、组件、js、css,一切都可以通过ifdef进行条件编译。

    跨端支持总结结论:uni-app>taro❀开发经验

    tarouni-appkbone支持所有cli

    工具,可以主流模式开发。图书馆。所有三个框架都支持主流的vuereact语法。支持的IDE工具链丰富且完整,包括颜色、验证和格式化。

    相比微信原生,这三个开发框架的开发体验更好。

    但就开发工具而言,明显优越的框架是uni-app。他的制作公司也是HBuilderX、DCloud.io的制作公司。 HBuilderX uni-app 做了很多优化包括代码提示、转到定义、easycom、运行调试……是其他框架无法比拟的。

    开发体验维度,对比结果:uni-app>taro,,Serverless /云开发

    无服务器是目前的热门概念。被称为下一代云技术,是真正的“云”。

    微信率先将Serverless技术引入小程序开发领域,即云开发,帮助开发者在云端完成业务。之后,支付宝和百度也推出了自己的云开发。根据微信公开数据,已有50万开发者在使用微信云进行开发。

    然而,小程序厂商主导的云开发有一个天然的局限性,那就是与平台绑定太紧密,无法与其他平台共享数据。

    我们以微信云开发为例。如果你只开发微信小程序,数据专门存储在微信平台上,这不是问题;但如果您还有应用程序或其他小程序,此时微信小程序的数据会被保存。在微信平台上,其他平台的数据存储在开发者自己的服务器上,此时就会出现数据碎片。假设用户首先使用小程序,其个人数据存储在微信平台上;然后在获得粘性后升级到应用程序。此时,App无法读取微信平台上的数据,用户也无法在小程序中看到之前的历史数据,甚至需要在App平台上重新注册。这种情况对于开发商来说是有害的。

    因此,跨端Serverless方案是开发者的最优方案。

    目前支持云开发的主流框架:

    • 王牌:仅支持微信小程序,详情参见小程序云开发模板,采用Serverless模式,js编程的云开发平台,支持所有app/H5 / 小程序平台。详情请参见uniCloud
    • kbone:仅支持微信小程序。详情请参见云开发

    在Serverless维度,uni-app明显领先于其他框架。

    插件市场

    一个开发框架是否成功,不仅取决于框架本身的产品化程度高低,还取决于开发者生态的构建。

    uni-app于2018年底率先上线插件市场。支持前端组件、js sdk、页面模板、项目模板、原生插件等类型,并提供认可、付费购买等手段来激励轮子作者。创作热情。目前,市场上已发布插件近1500个,不少插件下载量超过10000次。

    Taro于2019年5月在材质市场上线。目前已有90种材料上市;从热门榜单来看,下载量并不大,下载最多的也只有几百个。

    kbone目前没有外挂市场。 ?

    学习资源

    除了各大框架的官网之外,开发者通常还会通过视频教程、社区博客等进行系统学习。因此我们从各个第三方网站收集了数据。视频教程

    开发沟通

    除了介绍资源之外,开发期间的沟通也很重要。所以我们主要看官方组织的社区和交流群。

    社区论坛

    u​​ni-app是一个问答社区,帖子丰富,积累多;它收集了超过20,000个相关帖子,每天更新数百个帖子,每月有数百万个UV。

    对于习惯使用github topic报告问题的用户,uni-app也支持。目前共有 1391 个问题。

    Taro早期有基于Github问题的产品bug管理。目前有近4898个问题。后来,开发者社区于2019年5月上线,与素材市场同时上线。目前有 1300+ 条帖子,每天大约有 10 条更新帖子,相关数据计算方法如下:

    • 帖子总数:选择Taro社区顶部部分 ,并计算每个部分下所有科目的总数,如下所示。
    • 每日更新帖子数量:根据帖子列表中最后回复时间计算24小时内有回复或评论的主题总数

    小程序跨端开发框架深度横评之2020版

    kbone微信公开新增Kbone官方小队专区社区。由于产品发布较晚,目前只有一百多个帖子。

    汇总社区帖子和广播数据,情况如下(采集时间为2020.04.03 23:00):

    小程序跨端开发框架深度横评之2020版

    交流群

    框架部队QQ群 沟通小组发展(估计)
    taro16-8k
    uni-App2040+0敖明-10.5k

    Taro有16条微信小贴士基于群衍生Taro官网上显示Taro的发展通讯15组已满。每个微信群500人,交流群人数为:500*16=8000人

  • uni-App 官方QQ群35个,微信群20个,特色QQ群十多个,其中30个QQ群已达2000人。通讯群数量:30 2000 + 5 1000 + 20*500 + 5000 = 9万人
  • kbone有通讯群的阅读Qme。当你报名参加时,显示500人已满
  • 除了交流群之外,DCloud还向公众宣布uni app的开发者数量已达百万。我们还没有看到tarokbone发布这样的数据。

    总体来说,开发沟通维度的对比结果如下: uni-app > taro o Ming 其他指标github

    star贡献者
    taro24.6k122
    kbone2.7k7

    在开源社区方面,Taro还是很成功的。它吸引了更多的开发者为其贡献代码和文档。

    百度指数

    通过index.baidu.com,可以看到主流框架的搜索指数,它代表了网友的搜索量以及相似文章的收录情况。目前,kbone尚未纳入百度索引。以下是近期uni-Apptaro的百度指数对比图:❀ee作为决策依据,最终结果还是取决于开发者团队的技术栈、业务需求、未来计划等。而且不懂​​Vue.js,我推荐Taro;

  • 如果您熟悉Vue.js,推荐Uni-App;
  • 如果你已经有了H5代码,只是想添加一个微信小程序平台,并且对性能要求不高,可以考虑kbone;
  • 如果您的业务涉及终端较多,更推荐Uni-App;
  • 如果您想通过无服务器方案快速启动业务,推荐Uni-App。
  • 版权声明

    本文仅代表作者观点,不代表Code前端网立场。
    本文系作者Code前端网发表,如需转载,请注明页面地址。

    发表评论:

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

    热门