公司新产品要求发布到各家小程序,最近研究对比了社区主流的几家小程序开发框架,独坑不如拉人众坑,分享给各位,欢迎和我一块儿入坑:)css
最近老板不知怎的很重视各类小程序平台,感受要靠小程序完成今年大半kpi。。。 产品和运营天然找咱们要方案,一方面要快速铺开各类小程序,另外一头hr又不给前端团队加headcount,我只能前端
目前几杆枪,主要在微信和H5上,若按照各家规范进行原生小程序开发,确定是不够的;vue
所幸业内有人在作跨各类小程序的框架,趁机研究一番,看看到底作的怎么样。react
咱们主要分析了以下小程序开发框架(应该差很少全了),主要包括:git
框架 | 技术栈 | 案例 | 微信小程序 | 支付宝小程序 | 百度小程序 | 头条小程序 | H5 | App |
---|---|---|---|---|---|---|---|---|
Taro | React | 丰富 | ⭕ | ⭕ | ⭕ | ⭕ | ⭕ | ⭕ |
娜娜奇 | React | 少 | ⭕ | ⭕️ | ⭕️ | ⭕️ | ⭕️ | ❌ |
wepy | Vue | 丰富 | ⭕ | ❌ | ❌ | ❌ | ❌ | ❌ |
mpvue | Vue | 丰富 | ⭕ | ❌ | ❌ | ❌ | ⭕️ | ❌ |
uni-app | Vue | 丰富 | ⭕ | ⭕️ | ⭕️ | ⭕ | ⭕️ | ⭕ |
megalo | Vue | 少 | ⭕ | ⭕️ | ⭕️ | ❌ | ❌ | ❌ |
OKAM | Vue | 少 | ⭕ | ⭕ | ⭕ | ⭕ | ❌ | ❌ |
Mpx | Vue | 少 | ⭕ | ❌ | ❌ | ❌ | ❌ | ❌ |
Tips:如上表格包含了各框架在微信、支付宝、百度、头条、H五、App多平台的支持状况,鉴于掘金的markdown表格排版限制,你须要向右滑动查看完整支持对比。github
咱们的筛选权重:vuex
最后,咱们决定把taro、uni-app两个框架做为候选,作进一步对比。 uni-app其实内置了mpvue,感受是个增强版,拓展到多端了。 其实这2个框架的github star差的有点多,taro远超uni-app,但不能根据这个直接作决定,对比报告仍是得作的,果真最后发现不能以star取人。vue-cli
看了几天文档对2个框架大概摸到门道,理了下对比思路,仍是认真从以下几个维度比较下taro、uni-app两个框架:npm
数量对比小程序
双方都宣传能支持微信、百度、支付宝、今日头条等小程序,H5,以及iOS和Android的App。看起来都不错。
质量对比
为验证最终跨端效果,咱们分别下载 taro、uni-app的示例项目,体验编译到不一样平台的运行效果。
首先选择 taro 官方帐号下的知乎小程序示例(github地址),运行到各端后的效果:
从如上截图来看,taro成功实现了多端编译;咱们接着更细致的对比了一下各端运行,发现taro在以下方面存在问题:
以后点击二级页、三级页,发现H5端的其它问题:
针对这些问题,咱们复查了一遍taro官网,官网却是明确说明部分事件函数在H5端不生效,主要包括:
方法 | 做用 |
---|---|
onPullDownRefresh | 页面相关事件处理函数--监听用户下拉动做 |
onReachBottom | 页面上拉触底事件的处理函数 |
onShareAppMessage | 用户点击右上角转发 |
onPageScroll | 页面滚动触发事件的处理函数 |
onTabItemTap | 当前是 tab 页时,点击 tab 时触发 |
不过进一步仔细发现,taro文档里大量存在只有微信平台打勾的状况,H5和App侧大量的X。这说明跨其余平台很难平滑迁移。
接着运行uni-app示例项目,选择官方帐号下的看图App模板(github地址)测试,运行到各端后效果:
从上图来看,uni-app 一样成功的实现了多端编译;咱们接着更细致的对比了一下各端运行,发现以下问题:
以后点击二级页、三级页,没再发现明显问题。
从两个项目的实际运行来看,uni-app的跨端效果更好(其实不止对比了官方demo,咱们本身也写了小demo),特别是在H5平台相比taro要完善很多。
另外,在进行两个框架的发行编译时,咱们还发现了一个差别点:
dist
目录下不区分编译平台,同一时间仅可编译到一个平台,不支持多个平台对比查看运行效果;dist
目录区分编译平台,故支持同时编译到多个平台,可同时对比查看不一样平台运行效果,这个体验是不错的,更有跨端开发的感受 另外uni-app的条件编译比较完善,这个在处理平台差别时颇有用。案例对比
两个框架都在官网放上了众多案例,只是taro案例清一色是微信小程序,没看到其余端,难道你们使用taro,只是为了用react开发微信小程序,不须要跨端?
uni-app的案例什么平台都有,不少App作了多个平台。提及来咱们领导还问过跨iOS、Android App的事情,不过目前另有原生团队,咱们也只是作个备份调研。最终仍是决定先把前端的技术统一了,稳定后再考虑App是否也迁移到这类框架下。
综合比较,uni-app跨端质量更好,真实跨端案例也更多。
咱们在网上查阅了一些文章,有人认为taro的运行性能好于mpvue,而uni-app集成了mpvue,这个性能问题就得重点关注了。
不论是taro仍是uni-app,setData
的优化都是小程序性能优化中最为重要之事,且优化主要有两个方向:
setData
调用的频次setData
传输的数据而后在调研中发现,uni-app其实还集成了另外一个前述参选的框架megalo
(怎么都被它揉进去了)
前面调研时知道megalo
是作了差量数据更新的,那就应该问题不大。
咱们本身动手写了一个长列表测试,分别写了taro版、uni-app版、原生小程序版,前几页数据滚动时差很少,七、8页过去发现uni-app加载新页面时有变慢的感受。 推测uni-app的长列表没有recycle机制,花了点时间把demo改进了下,滚动下面时把前面几页的数据干掉,而后再滚动就感觉不到流畅度的差异了。
总结:taro在性能优化上作的更细致,使用uni-app须要本身注意代码优化。
taro 和 uni-app 的环境搭建及项目建立、运行编译都比较简单。
taro的安装及使用:
# 全局安装 @tarojs/cli
$ npm install -g @tarojs/cli
# 建立 taro 项目
$ taro init myApp
# 进入项目目录
$ cd myApp
# 运行到微信小程序,调试模式
$ npm run dev:weapp
# 发行到微信小程序
$ npm run build:weapp
复制代码
uni-app的安装及使用:
# 全局安装 vue-cli
$ npm install -g @vue/cli
# 建立uni-app项目
$ vue create -p dcloudio/uni-preset-vue my-project
# 进入项目目录
$ cd my-project
# 运行到微信小程序,调试模式
$ npm run dev:mp-weixin
# 发行到微信小程序
$ npm run build:mp-weixin
复制代码
开发流程方面,taro和uni-app均是以微信小程序为基础,也都针对小程序的开发弊端,提供了更优秀的体验,好比:
开发工具方面,taro官方未特别推荐IDE,但提供了vscode支持的d.ts; uni-app推荐的开发工具是他自家的HBuilderX,用它能够不配环境,开箱即用; hbuilder之前接触过,当时没深研究,新版还挺让我意外,真没想到国人的开发工具能够作到这样,尤为是他家的markdown支持真心不错,因而本文就是在hbuilder里写的(已经有情感分了哈哈)。
总结:两个框架都支持现代前端开发流程。hbuilder对uni-app提供了优化定制,但对不熟悉的开发者有必定适应成本。另外hbuilder自带一个编译器,和cli装在项目下的编译器是2个,这个坑很多新人要注意别踩。
学习交流
Taro经过Github Issues+微信群方式交流,微信群活跃,贡献代码的人也多。
uni-app有专门的论坛,还有视频教程,QQ群微信群都活跃。
另外文档角度,uni-app的文档比taro要完善,数了数交流群的数量,也是uni-app多很多。
生态
taro官方发布了taro-ui库,awesome里三方组件不太多。
uni-app官方发布了uni-ui库,还有个插件市场,里面轮子不少,作业务应该能够很快拼轮子作出来。
橱窗里的衣服再漂亮,适合本身的才有用,开发框架亦是如此。
咱们根据业务需求及团队成员现状,造成以下对比:
所以,咱们团队最后决定使用uni-app做为新项目的开发框架。
但挺诚心感谢其余开源框架的做者的,各位大牛的无私奉献,让咱们能够节省这么多人力,拜谢! 喜欢taro的朋友也莫喷我,你们各有所好,react和vue谁更好之类的骂战就不要继续延续到这里了。
接下来确定会有不少uni-app的坑,等着咱们去跳,但我等猿类的宿命就是不断跳坑、爬坑ㄟ( ▔, ▔ )ㄏ,待咱们项目结束,再写一篇《uni-app爬坑血泪史》分享给你们。
============end============
没想到今天正好在掘金看到uni-app的广告了^_^