小程序开发:原生还是框架(wepy/mpvue/uni-app/taro)?
2017-1-9
微信小程序诞生以来,经过2年多的反复升级,已推出数百万个小程序,已成为继Web、iOS和Android之后的第四大开发技术安卓。
此外,小程序的开发生态也在蓬勃发展,从最初的微信原生开发,到 有这么多的可能性,一个问题就出现了。开发小程序应该使用原生还是选择第三方框架? 首先,微信原生开发的大部分缺点如下: 同时,开发者对于第三方框架总是有不同的顾虑: 面对如此复杂的场景,很多热心人开发者已经发表了评论文章,分享您的经验,但我认为有不同的意见和太多过时的信息。缺乏非常专业、深入或者用现在流行的说法“硬核”的评估报告。 评估报告的制作不同于一般的经验交流。实际上需要很多时间。要求: 也就是说:想要认真评估,就得努力! 本文从两个维度 软件开发的主要目标是为用户闭环提供完整的业务功能。 如果在Web开发中使用vue、react这样的框架让开发者无法管理浏览器提供的所有API,那么这样的框架肯定是不成熟的。小程序的开发也是如此。没有任何开发框架可以限制基本的API调用。 各种业务功能底层依赖于微信暴露的组件和接口(微信官网介绍的API组件和规范,也称为微信原生API)。三方框架是在原有微信的基础上进行二次封装。开发者经常会出现一个问题:小程序是不断迭代升级的。如果某个公司依赖了最新的小程序API,但第三方框架尚未封装怎么办? 其实就像web开发中的vue和react一样,浏览器有新的API,不包含vue和react升级。本次评测中并非所有框架都会限制开发者调用基本功能。这里详细解释一下原因: 注:以上顺序按各框架诞生的顺序,下同。 因此,所有第三方框架都可以调用所有小程序API来满足用户的业务需求。在这个维度上,框架之间没有区别。 然而,不同之处在于实施体验。 大多数第三方框架都是内部封装的。这些封装会增加工作量并导致性能下降吗?首先,性能与微信小程序原生开发相比如何,是大家共同关心的问题。 为了客观对比,我们特地制作了一个测试模型,具体如下: 我们以前面提到的微博小程序样机为例,测试一下容易出现性能问题的两个点:加载长列表和响应大量相似组件。 模仿微博的列表是一个包含很多组件的列表。这种复杂的列表对性能造成的压力较大,非常适合性能测试。 从触发拉取负载到数据更新、页面渲染完毕,需要一段准确的时间。人类视觉时间测量是绝对不可能的。我们使用程序埋点并创建以下时间表: 提示: 测试方法:从页面上的空列表开始,通过程序自动加载拉取系统,每次添加20个列表,记录一次性消耗;以固定的时间间隔连续触发N次拖动加载,使得页面达到20*N个列表时,计算从触发拖动到渲染完成的平均时间。 测试结果如下: 说明:以400条微博列表为例,从页面空列表开始,每1秒触发一次上传(新增20条微博),记录一次耗时,触发20次后停止(页面达到400条微博),并计算这20次的平均耗时。结果,微信原生在这20次 当你第一次看这个数据时,你可能会一头雾水,不用担心,详情如下。注 注1:为什么mpvue/wepy测试数据不完整? 但是采用这种方案,当页面复杂、组件较多时,页面上的DOM节点数量会大幅增加,甚至超过微信对DOM节点数量的限制。我们在红米手机(红米6 Pro)上进行了测试。当页面组件数量超过500个时, 超出首页限制,检查是否有误 Tips1: Tips2: 说明2:为什么测试数据显示uni-app的性能比微信原生框架略好? 事实上,当页面有200条记录(200个组件)时, 原来的微信框架需要花费很多时间,尤其是在调用 当前页有20条数据。触发上传时,上传20条数据。此时源码框架进行下一步代码测试时, 使用微信源码框架的开发用户可以优化和简化数据传输。例如变更如下: 经过上述优化变更后,再次测试微信原生框架的性能数据如下: 从测试结果可以看出,开发后如果用户手动优化,微信原生框架可以达到更好的性能,但是 这个结果与Web开发类似。 Web开发还包括原生js开发、vue、react框架等。如果不进行专门的优化,原生 JS 编写的网站性能往往不如 Vue 和 React 框架的性能。 正是因为 复杂长列表加载下一页,回顾结论: 提示:有些人认为uni-app和mpvue是一样的。早期的uni-app使用mpvue,后来为了性能和语法而使用vue。支持问题已重新开发。 长列表中的某个组件,比如Like组件,是否可以在点击“时及时改变Like和Like的状态?”这是本次测试的评估点。 测试方法: 我在红米手机(红米6 Pro)上做了几次测试,得出了平均值。结果如下: 描述:这意味着当列表数量为 400 时,对于最初在微信上开发的应用程序,“点赞”按钮从点击到改变状态需要 111 毫秒。 测试结果数据说明: 组件数据更新成功评估:wepy、
wepy > mpvue
、taro
、uni-app
等框架相继出现,从刀耕火种的农业发展到现代发展,生态系统越来越丰富。 uni-app
团队花了2周的时间完成了这份报告,并坚持每季度更新这份评估报告。目前更新时间为2019年5月。为用户和开发者
重点介绍七个细节,分析微信原生和常规wepy
、mpvue
、。开发框架taro
和uni-app
进行横向对比,希望为开发者在选择小型框架时提供参考思路。本文基于各框架官网可以收集到的公开数据和真实测试数据,希望能够客观公正地评价各框架的现状和优缺点。但由于涉及利益,本文的观点很可能存在偏见。你可以用批判的眼光来看待它。如果您发现本文中存在任何估值扭曲,您可以在此处报告问题。 以用户为中心,以开发者为中心
维度,特别包括: 1.用户
1.1 功能实现
mpvue.request()
Taro.request()
类似。支持Taro代码和小程序代码混合编写,可以通过混合编写调用框架未封装的新小程序。 APIuni.request()
。它还支持条件翻译。各平台新的API和组件可以在条件编译代码块中任意调用1.2 性能体验
cli
默认安装。 1.2.1 加载长列表
setData
回调函数开始可以认为是页面渲染完成的时间,因为微信setData
定义如下(微信规范): 触发引发->渲染完成
平均耗时876毫秒,最快的uni-app
为741毫秒。十亿秒,最慢的mpvue
是4493毫秒mpvue
、wepy微信小程序诞生之初,不支持自定义组件,无法进行组件化开发。 ;
> mpvue
、wepy为了解决这个问题,用户编写的组件
中,组件的开发实现了皮肤中的功能并提高了代码重用。这在当时的技术条件下是一个非常优秀的技术方案。 Vue
被翻译成模板在WXMLmpvue
和wepy运行的仿微博应用会报如下异常并停止。渲染,所以当这两个测试帧中有很多组件时,测试数据是不完整的。这意味着如果页面组件太多,这两个框架就无法使用。
每次只下载更改的数据。 wepy官网的CHANGELOG提到试用版v1.7.2增加了对原生小程序组件的支持,实测有很多陷阱,由于是测试版本,官方在编号中表示不建议使用;根据官网文档,默认安装的正式版 v1.7.3 不支持原生组件
wepy 在 400 项列表里面,为什么性能比原来高微信框架?这与管理自定义组件和业务场景的成本有关(
wepy编译成模板,不包含创建和管理组件的成本)。微博上继续。在传输组件数据时,微信原生框架的性能优势就显现出来了。详细请看下面的测试数据。
taro
比原生微信框架有更好的性能数据。 setData
。除非开发者专门优化,否则每次都会传输大量数据;和 uni-app
、 taro
都会在调用 之前自动执行 diff
计算setDatasetData
将传输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
、taro
相比微信原生,性能差距并不大。 Vue
和react
优秀、良好的性能和良好的开发体验,原生js开发逐渐被使用得越来越少。 微信原生开发手动优化
,uni-app
>微信原生开发未手动优化
,taro
>wepy>
mpvue
1.2.2 Like组件的响应速度
onclick时间从年初开始计算函数和计时在回调函数
setData
开始时结束; 微信原生开发者
、uni-application ,
tarompvue
综上,本次性能测试通过了2个测试。加载一长串并更新组件状态,广泛进行了两次实验,结论如下:
微信原生开发手动优化
、Uni-APP
>微信原生开发是不是手动优化
。接下来我们讨论一下开发者的需求,首先从以下几个维度进行比较:
- 平坦的学习曲线:简单易学,最好复用现有的技术集,丰富的学习资料
- 高效的开发体验:现代前端开发流程,工程支持
- 有效的社区支持:遇到问题可以快速获得帮助
- 积极的开发迭代:框架主动更新升级,无需担心停止更新
2.1 平缓的学习曲线
2.1.1 DSL 语法支持
选择开发团队熟悉且能够快速使用的DSL,是选择团队框架的基本点。
首先,微信原生开发语法类似于React
和Vue
,有点难以形容。对于开发人员来说,这意味着他们必须学习新的语法,这是一件大事。大家都批评他增加了学习成本。
其他开发框架基本遵循React和Vue的语法(与Vue类似)。他们的主要目的是重用现有的工程师技术组并降低学习成本。目前,一个重要的标准是框架对原始框架(React/Vue)语法的支持。如果支持度低,并且语法与原来的框架有很大不同,那么开发人员就必须学习新的框架。 ,成本太高了。
实际开发中发现没有一个开发框架完全实现Vue
、React
所有语法在线:
DSL 语法支持审核: 2.1 .2 学习资料的完整性 官方文档、问题查找和示例demo的完整性: 教学课程: 教材完整性评价:微信原生> 在开发经验方面,微信原生开发明显处于劣势。主要差距是: 支持其他小程序开发框架 因为 好的开发工具绝对可以大大提升开发体验。在这个维度上,明显更高的框架是 体验维度开发,对比结果: 在这里我们可以得出一个结论:如果你需要工程能力,就别去微信原生开发了。 学习和发展的困难是不可避免的。官方的技术支持和社区活动非常重要。 在本次评测demo的开发过程中,我们的同学(同时掌握了Vue和React)在学习各种多端框架时,切实感受到了语法、课程、社区差异带来的学习门槛,吐出一句很多。槽。 全面审查,本次审查结论: 开发者应该关心一个问题:是否有人会长期维护该项目? 这个问题可以通过github上传频率、产品更新日志(changelog)、百度搜索指数等指标来衡量和比较。 github提交频率 我们收集了2019年4月各项目在github上master分支提交的天数(时间为4.1~4.30)。结果如下: 提示: 从 commit 记录来看, 产品更新日志 通过浏览产品更新日志,您可以查看产品是否在积极迭代、添加新功能、修复用户Bug等。 我们来看看各个框架官方链接的更新日志(CHANGELOG)。下面是链接地址: B l 产品更新日志比较、微信原生、 随着微信小程序的流行,支付宝、百度、字节跳动等公司也纷纷进入小程序领域。这些公司均拥有超过1亿的日活跃用户,拥有庞大的用户基础。企业主希望您的业务能够触及每一位用户,无论用户使用哪个小程序。 请求被传送给编程器。程序员要做什么?各个平台真的到处搬砖吗?这时,一套代码、多终端发布成为了很多程序员的梦想,终端间小程序的框架就这样诞生了。 现实真的可以这么理想吗?每个跨框架真的可以像官网宣传的那样,一次开发,面向所有小件平台发布吗?还可以在H5平台上复用代码吗? 我们用事实说话。我们仍然使用上面提到的微博模型,依次发布到各个平台,检查各端各个框架的兼容性。结果如下: 测试结果说明: 从这个简单的例子可以看出,结论交叉支持评价: 框架。一方面需要考虑框架提供的终端间通用API支持,但同时也需要考虑不同终端特性的差异如何兼容。最终,每个结局都会有自己的特点,不可能完全一致。 跨框架还包括UI框架的跨问题。评测结果如下: 最后添加了相互的例子: 综合以上信息,本项最终评测结论为: 实验和数据永远是真实客观的,而不是结论。不同需求的开发者可以根据上面的实验数据做出自己的选择。 但作为一个完整的概述,我们也必须提供一个总结,尽管它可能会增加我们的主观感受: 如果你只开发微信应用,做的事情不多,那么使用 如果开发更多终端, 作者:CHBwepy 发展风格接近
Vue.js于,属于Vue类别的实现,比微信原来的开发进步了一大步,但距离完整的
Vue还有很大差距 语法、发展 你必须特别学习它的规则;
和运行时。mpvue
、uni-app
该框架基于核心Vue.js
通过修改 Vue.js编译器
在小程序这边执行操作。 mpvue
支持的Vue语法稍少,uni-app
基本支持大部分vue语法,比如filter
,比较复杂JavaScript
表达式,等等; taro
对JSX
的语法支持也达到了绝大多数人支持的完美程度。 taro
、uni-app
> mpvue >
wepy
> 微信原生uni-app
>mpvue
,taro
> cli
模式可以在常见的前端工具中进行开发,基本自带d.ts语法提示库。 mpvue
、uni-app
、taro
直接支持vue
、响应
语法、配套的IDE工具链比较丰富,着色、验证、格式化功能齐全; wepy 较弱,并且有一些第三方维护的 vscode 插件。
uni-app
。其制作公司也是HBuilder、DCloud.io的制作公司。 HBuilder是四大前端开发工具之一(相当于百度索引)。他对uni-app
做了很多优化,所以uni-app
的开发效率和易用性是无与伦比的。框架可访问。 uni-app
> taro
、mpvue >
相对较弱且不可持续。 wepy
>微信首页2.3 有效的社区支持
微信原生
,uni-app
> taro >
、 mpvuempvue
> wepy
2.4 积极的开发迭代
wepy。 master 分支没有提交,最新的 2.0.x 分支只有四月份的一天。 commit 记录
taro
、uni-app
处于更新相对活跃的状态, wepy taro
、uni-app
经常更新错误修复和新功能添加。处于比较紧凑的状态;而mpvue
、wepy已经很久没有发布了,而
wepy甚至几乎没有正式发布一年。版本、开发请谨慎选择。
、2.5多终端复用
uni-app
, taro
>mpvue
> 微信原生小程序wepy 但仅限于以上。测试尚未完成,实际操作比这个测试用例复杂得多。 。然而,我们无法开发很多复杂的公司来进行估值,因此我们需要通过与每个公司的文件进行比较来补充一些信息。因为每个框架的文档都描述了对不同组件和 API 的交叉支持级别。我们查阅了几家公司的文档,发现每个公司基本都是以微信小程序为基础,然后在其他终端上实现不同的组件和API:
、taro
:H5终端实现了微信的大部分APIuni-app
:大多数组件、API 和配置都在所有终端上实现。某些 API 的指令在某些终端上不受支持。我们可以看到uni-app在H5页面上已经完全实现了微信模拟器在终端之间设置taro
:提供判断js环境变量的多端文件和统一的接口。它可以在组件、js和文件方面扩展多终端。不支持其他链接的分平台处理。 uni-app
:提供条件编译模型。所有代码包括组件、js、css、json配置、文件和目录都支持条件编译,你可以无限制地为每一端编写差异化代码。taro
:官方提供taro ui
,仅支持微信小程序和H5端。 ,不支持该app,详情请见uni-app
:官方优惠uni ui
,可在所有页面运行; uni-app 还有一个插件市场,其中包含许多第三方 UI 组件。详情见uni- app
> taro
> mpvue
> 原创应用微信wepy结论可以在这里找到。如果有多端发帖的需求,微信原生开发,
wepy这两种方法可以直接淘汰。
结论
uni -app
、taro
是更好的选择。它们相当于网络世界中的vue和react。无需使用这些工具进行本机 wxml 开发。 setdata
并且注意它的工程能力很弱正在行动
系统,则使用taro
vue
,则使用uni-app
, uni-app
在性能、环保方面生态和开发效率更有优势uni-app
和taro
都可以接受。您可以根据您所了解的技术组合进行选择。相对来说,uni-app
更加成熟。
链接:https://juejin.im/post/5cfdcf056fb9a07ecd3d5068
来源:掘金
版权归作者所有。商业转载请联系作者获得许可。非商业转载请注明来源。
版权声明
本文仅代表作者观点,不代表Code前端网立场。
本文系作者Code前端网发表,如需转载,请注明页面地址。
发表评论:
◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。