开发小程序,该用原生还是选择三方框架?|崔红保
发表时间:2023-10-15 16:15:03
文章来源:炫佑科技
浏览次数:124
菏泽炫佑科技 菏泽炫佑小程序开发 菏泽炫佑app制作 炫佑科技
作者 | 崔洪宝
编辑| 王英
微信小程序自2017年1月9日诞生以来,经过2年多的迭代升级,已上线数百万小程序,成为继Web、iOS、iOS之后的第四种主流开发技术。
随之而来的是,小程序的开发生态也蓬勃发展。 从*初的微信原生开发开始,wepy、mpvue、taro、uni-app等框架相继出现。 从刀耕火种到现代开发,生态系统日益丰富。
有了这么多的选择,问题就来了。 开发小程序时,应该使用原生框架还是选择第三方框架?
首先,微信原生开发的大部分缺点如下:
原生开发对Node、预编译器等没有很好的支持,影响开发效率和项目构建流程。
微信定义了一种不伦不类的语法。 不如认真学习Vue和React,学会跨所有终端使用它们,而不是仅仅用于微信小程序。
vue/react 生态中有太多可以提高开发效率的外围工具,比如 IDE、验证器、第三方库……
微信IDE与专业编辑器相比有一些缺点和不足。
同时,开发对于第三方框架始终存在各种顾虑:
怕性能不如原来的。
恐怕有些功能框架无法实现,所以只能使用原生的。
就怕框架不稳跳坑了。
第三方框架有很多,应该使用哪一个呢?
面对如此纠结的场景,不少热心的开发纷纷发表评测文章分享经验,但又感觉意见不一,过期信息太多。 缺乏一份非常专业、有深度,或者用当今流行的话来说,“硬核”的评测报告。
制作评估报告与一般的经验分享不同,实际上需要花费大量的时间。 它需要:
换句话说:评价要想真实,就必须做得深入!
uni-app团队花了2周的时间完成了这份报告,并坚持每个季度更新这份评估报告。 目前更新时间为2019年5月。
本文从面向用户和开发两个维度对微信原生和主流的 wepy、mpvue、taro、uni- app开发框架进行横向比较,共有七个细节。 我们希望为开发选择小程序框架提供指导。 一个参考思路。 本文基于各框架官网可以收集到的公开数据和真实测试数据,希望能客观公正地评价各框架的现状和优劣。 但由于利益相关,本文的观点可能存在偏见。 你可以用批判的眼光来看待它。 如果您发现本文有任何评价歪曲的地方,请在此举报:
面向用户和面向开发维度包括:
用户:提供完整的业务实施,保证高性能体验。
开发:平缓的学习曲线、现代的开发经验(工程)、高效的社区支持、积极的开发迭代、多终端复用。
1. 用户
1.1 功能实现
软件开发的首要目标是为用户提供完整、闭环的业务功能。
在Web开发中,如果使用vue、react等框架让开发无法操作浏览器提供的所有API,那么这样的框架肯定是不成熟的。 小程序开发也是如此。 任何开发框架都无法限制底层API调用。
各种业务功能底层依赖于微信暴露的组件和接口(微信官网引入的组件和API规范,即微信原生API)。 三方框架是基于微信原生的二次封装。 开发这个时候往往会遇到问题。 问:小程序在不断迭代升级。 如果某业务依赖了*新的小程序API,但尚未封装第三方框架怎么办?
其实就像web开发中的vue和react一样,浏览器发布了新的API开发小程序,该用原生还是选择三方框架?|崔红保,并不涉及vue和react的升级。 本次评测的所有框架都不会限制开发调用底层能力。 这里详细解释了原因:
注:以上顺序是按照各个框架的诞生顺序,下同。
相关链接:
太郎代码和小程序代码混合:
条件编译:
因此,所有三方框架都可以调用所有小程序API来完成用户的业务需求。 在这个维度上框架之间没有区别。
不过,不同的是表现体验。
1.2 性能体验
大多数第三方框架内部都有层层封装。 这些封装是否会增加运行负载并导致性能下降? 尤其是与原生微信小程序开发相比性能如何,是大家共同关心的问题。
为了客观比较,我们特意搭建了一个测试模型,具体如下:
我们以上述仿微博小程序为例,测试两个容易出现性能问题的点:长列表加载和大量同类组件的响应。
1.2.1 长列表加载
模仿微博的列表是一个包含很多组件的列表。 这个复杂的列表对性能带来了较大的压力,非常适合性能测试。
从触发上拉加载到数据更新、页面渲染完成,都需要准确的时序。 人类视觉计时肯定是不可能的。 我们利用程序埋点,制定了如下的计时时序:
Tips:回调函数的开始可以认为是页面渲染完成的时间,因为微信定义(详细见下面链接)如下:
相关链接:
微信规格:
测试方法:从页面空列表开始,程序自动触发上拉加载,每次添加20个列表,记录单次耗时; 固定间隔连续触发上拉加载N次,使页面达到20*N个列表。 计算这N次从触发上拉到渲染完成的平均时间。
测试结果如下:
注:以400条微博列表为例,从页面空列表开始,每1秒触发一次上拉加载(新增20条微博),记录单次耗时,触发20次后停止(页面达到400条微博),计算这20次的平均耗时。 结果,这20次微信触发上拉->渲染完成的平均时间为876毫秒。 *快的uni-app是741毫秒,*慢的mpvue是4493毫秒
当你**次看到这些数据时,你可能会感到困惑。 别担心,下面有详细的解释。
注1:为什么mpvue/wepy测试数据不完整?
mpvue和wepy诞生时,微信小程序还不支持自定义组件,无法进行组件化开发。 为了解决这个问题,mpvue和wepy将用户编写的Vue组件编译成WXML中的(),变相实现。 组件开发能力提高了代码的复用性,这在当时的技术条件下是一个很好的技术方案。
但采用这种方案,当页面复杂、组件较多时,会大大增加页面的 DOM 节点数量,甚至超过微信对 DOM 节点数量的限制。 我们实际在红米手机(红米6 Pro)上进行了测试。 当页面组件数量超过500个时,mpvue和wepy实现的仿微博App会报如下异常并停止渲染。 因此,当组件很多时,这两个测试框架就不起作用了。 ,测试数据不完整。 这意味着当页面组件过多时微信小程序开发平台,这两个框架都无法使用。
dom limit 检查是否有你做过的
相关链接:
定制组件:
模板():
:#/
解释2:为什么测试数据显示uni-app的性能比微信原生框架略好?
事实上,当页面有200条记录(200个组件)时,taro的性能数据要优于微信原生框架。
微信原生框架主要消耗时间在调用上。 如果开发不单独优化,每次都会传输大量数据; 而uni-app和taro在调用前会自动进行diff计算,并且每次只传输变化的数据。
例如当前页面有20条数据。 当触发上拉加载时,会加载20条数据。 此时,当原生框架通过下面的代码测试时,将会传输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的性能差距并不大。
这个结果与Web开发类似,开发也包括原生js开发、vue、react框架等。如果不进行专门的优化,原生JS编写的网页性能往往不如Vue、React框架。
正是因为Vue和React框架的优秀、性能和开发经验,原生js开发的使用量逐渐减少。
复杂长列表加载下一页评测结论:微信原生开发手动优化,uni-app>微信原生开发未手动优化,taro>wepy>mpvue
Tips:有些人认为uni-app和mpvue是一样的。 早期uni-app确实使用了mpvue,但后来由于性能和Vue语法支持问题开发。
1.2.2同类元件响应速度
长列表中的某个组件,例如点赞组件,是否能够在点击时及时修改不喜欢和喜欢的状态? 这是本次测试的评价点。
测试方法:
在红米手机(红米6 Pro)上进行多次测试,求平均值。 结果如下:
注意:当列表数量为 400 时,对于微信原生开发应用,点赞按钮从被点击到改变状态需要 111 毫秒。
测试结果数据说明:
组件数据更新性能评估:微信原生开发、uni-app、taro > wepy > mpvue
总结一下,本次性能测试做了2个测试,长列表加载和组件状态更新。 根据2次实验,得出以下结论:
微信原生开发手动优化,uni-app > 微信原生开发未手动优化,taro > wepy > mpvue
2.开发
在满足用户业务需求的前提下,我们来谈谈开发的需求,并从以下几个维度进行比较:
2.1 平坦的学习曲线
2.1.1 DSL语法支持
选择一个开发团队熟悉、能够快速使用的DSL是团队框架选择的基本点。
首先,微信原生开发语法既像React又像Vue,有点不伦不类。 对于开发来说,这意味着他们必须学习一套新的语法,这大大增加了学习成本。 此举遭到了大家的批评。
其他开发框架基本遵循React和Vue(类Vue)语法。 他们的主要目的是重用工程师现有的技术堆栈并降低学习成本。 这时,框架对原有框架(React/Vue)语法的支持就是一个重要的标准。 如果支持度低,并且语法与原来的框架有很大不同,开发就不得不学习新的框架。 ,成本太高了。
在实际开发过程中,发现各个开发框架并没有完全实现Web上Vue和React的所有语法:
Wepy的开发风格接近Vue.js,是类似Vue的实现。 相对于微信原生开发来说是一大进步,但相对于完整的Vue语法还有很大的差距。 开发时需要单独学习它的规则;
mpvue 和 uni-app 框架基于 Vue.js 的核心。 通过修改Vue.js之和,就可以在小程序端运行了。 mpvue支持的Vue语法稍少,而uni-app基本支持大部分Vue语法,比如复杂表达式等;
taro 对 JSX 的语法支持也达到了大多数人支持的完美程度。
DSL语法支持评测:taro,uni-app > mpvue > wepy > 微信原生
2.1.2 学习材料的完整性
官方文档、问题查找、示例demo的完整性:
教学课程:
学习材料完整性评价:微信原生 > uni-app > mpvue、taro > wepy
2.2 现代前端开发经验
在开发体验上,微信原生开发处于明显劣势。 主要区别是:
其他小程序开发框架都支持cli模式,可以在主流前端工具中开发,而且基本上都有d.ts语法提示库。
由于mpvue、uni-app、taro直接支持vue和react语法,所以支持的IDE工具链比较丰富,着色、验证、格式化都齐全; wepy 较弱,并且有一些第三方维护的插件。
好的开发工具绝对可以极大的提升开发体验。 在这个维度上,明显更胜一筹的框架是uni-app,其制作公司也是.io()的制作公司。 是四大主流前端开发工具之一(可与百度指数媲美,详情见下面链接)。 它对uni-app做了很多优化,因此uni-app的开发效率和易用性是其他框架无法比拟的。
开发体验维度,对比结果:uni-app > taro、mpvue > wepy > 微信原生
这里可以输出一个结论:如果需要工程能力,微信原生开发就别想了。
相关链接:
对比百度指数:#/trend/?words=,,,
2.3 高效的社区支持
在学习和开发中难免会遇到问题。 官方的技术支持和社区活动非常重要。
在本次评测demo开发中,我们的同学(同时掌握了Vue和React)在学习各种多端框架时,真实感受到了语法、学习资料、社区差异带来的学习门槛,并吐槽不少。
综合评价,本次评价的结论:微信原生、uni-app > taro > mpvue > wepy
2.4 积极的开发迭代
开发必须关心一个问题:是否有人会长期维护该项目?
这个问题可以通过频率、产品更新日志()、百度搜索指数等指标来衡量和比较。
频率
我们收集了2019年4月各项目在分支的天数(时间为4.1~4.30)。 结果如下:
尖端:
从记录来看,taro和uni-app处于更新相对活跃的状态,而wepy和mpvue则相对较弱且无人维护。
产品更新日志
通过浏览产品更新日志,可以确认产品是否在积极迭代、添加新功能、修复用户Bug等。
我们来查看各个框架官方链接()的更新日志。 下面是链接地址:
通过产品更新日志对比,微信原生、taro、uni-app更新频繁,Bug修复和新功能添加处于比较紧凑的状态; 而mpvue和wepy已经很长时间没有发布版本了,而wepy甚至在2016年就有近1个正式版本没有发布,所以开发在选择时要谨慎。
2.5 多端复用
随着微信小程序的流行,支付宝、百度、字节跳动等公司也纷纷进入小程序领域。 这些公司每家日活跃用户均超过1亿,拥有大量用户。 企业主希望他们的业务能够触达每一位用户。 无论用户在哪个小程序中。
需求被转移给程序员。 程序员应该做什么? 各个平台真的到处搬砖吗? 这时一套代码、多终端发布就成为了很多程序员的梦想,小程序跨终端框架应运而生。
现实真的可以如此理想吗? 每个跨端框架真能像官网宣传的那样,一次开发,发布到所有小程序平台吗? 甚至可以在H5平台上复用代码?
我们用事实说话,仍然使用上面提到的仿微博App:依次发布到各个平台,验证各端各个框架的兼容性。 结果如下:
测试结果说明:
从这个简单的例子可以看出,跨端支持评测结论:uni-app, taro > mpvue > 原生微信小程序, wepy
但仅靠上面的测试是不全面的,实际业务比这个测试用例复杂得多。 但我们无法开发很多复杂的业务进行评估,所以我们需要通过与每个公司的文件进行比较来补充一些信息。 因为每个框架的文档都描述了对各种组件和API的跨端支持程度。 我们查阅了几家公司的文档,发现各家公司基本都是以微信小程序为基准,然后在其他终端上实现各种组件和API:
对于跨终端框架,一方面要考虑框架提供的通用API跨终端支持,同时还要考虑不同终端的特性差异如何兼容。 毕竟每个端都会有自己的特点,不可能完全一致。
跨端框架也涉及到UI框架的跨端问题。 评价结果如下:
*后添加跨终端的情况:
综合以上信息,本项目*终评估结论为:uni-app > taro > mpvue > 原生微信小程序,wepy
这里可以输出一个结论。 如果需要多端发布,微信原生开发和wepy可以直接淘汰。
结论
真实客观的永远是实验和数据,而不是结论。 不同需求的开发可以根据以上实验数据得出自己的选型结论。
但作为一个完整的评论,我们还必须提供一个总结,尽管它可能包含我们的主观感受:
如果你只开发微信小程序,不做多端,那么使用uni-app和taro是更好的选择。 它们相当于网络世界中的vue和react。 有了这些工具,你不再需要使用原生的wxml开发。
如果开发多端,uni-app和taro都可以。 你可以根据自己熟悉的技术栈来选择。 相对而言,uni-app的多端成熟度更高。
如果任何读者认为本文中的任何评论有歪曲之处,请在此举报:
点击查看更少的错误