• 开发跨端微信小程序框架选型指南


    多端框架uni-app和Taro选型对比

    一. 背景

    小程序原生开发有不少槽点:

    1.原生wxml开发对Node、预编译器、webpack支持不好,影响开发效率和工程构建流程。所以大公司都会用框架开发
    2.微信定义的这套语法,wxml、wxs,以及wx:if等语法,私有化太强。不如正经学vue或react,学会了全端通用,而不是只为微信小程序
    3.vue或react生态里有太多周边工具,可以提高开发效率,比如ide、校验器、三方库。。。而微信的开发者工具和专业编辑器相比实在不好用,个性化设置也非常少

    作为前端工程师,除了微信小程序,还要开发web、其他小程序甚至App,人们不喜欢来回切换开发工具和变更语法思考方式。

    一些多端框架uni-app或taro可以解决这些问题,但开发者又经常有些顾虑:

    1.怕使用框架后,微信小程序里有的功能无法实现,受制于uni-app的更新
    2.怕性能不如原生WXML
    3.怕框架不成熟,跳到坑里
    4.担心社区生态不完善

    本文从开发者关心的功能、性能、学习门槛、开发体验、生态、可扩展性等维度对uniapptaro进行了分析测评。

    二. uni-app和Taro的介绍

    1.### uni-app:uni-app 是一个使用 Vue.js 开发跨平台应用的前端框架,开发者编写一套代码,可编译到iOS、Android、H5、小程序等多个平台。

    详细介绍见官方文档:uniapp.dcloud.io/

    1.### taro:taro是多端统一开发框架,支持用 React 的开发方式编写一次代码,生成能运行在微信/百度/支付宝/字节跳动小程序、H5、React Native 等的应用.

    详细介绍见官网:nervjs.github.io/taro/

    三.uni-app和Taro的特点

    1.### 官网介绍uni-app的特点:* 跨端数量更多;一套代码,可以发布到IOS,Android,小程序,H5等多个平台。

    • 平台能力不受限:在跨端的同时,通过推荐编译+平台特有API调用,可以优雅的为某平台写个性化代码,调用专有能力而不影响其他平台;支持原生代码编写和原生sdk生成。

    • 性能体验优秀:体验更好的Hybrid框架,加载新页面速度更快

    • 周边生态丰富:支持NPM包管理,兼容微信小程序自定义组件及JS,SDK,支持mpvue项目及组件,APP端支持和原生混合编码;相当于微信小程序中丰富的三方sdk克直接用于跨平台开发。

    • 学习成本低:基于通前端技术栈,采用vue语法+微信小程序api,无额外学习成本。

    • 开发成本低:人力成本大幅度节省,招聘,人力,管理,研发,测试各方面成本大幅度下降;HbuildX是高效开发利器,熟练掌握后研发效果至少翻倍(即便值开发一个平台)。

    2.### 官网介绍taro的特点:* 多端运行:一键生成可以在微信小程序/H5/ReactNative等端运行的代码。

    • 语法风格:采用React语法标准,支持JSX书写,让代码更具表现性。
    • 组件化:支持组件化开发,让代码可以复用,让功能开发更加清晰。
    • TypeScript:全面支持TypeScript,提供更强大的生产力。
    • 现代开发流程:配套的开发工具Taro CLI让开发流程自动化,一切都从一行命令开始

    四. 内容测评比较

    uni-apptaro原生
    1.功能相同,不限制底层API 调用相同,不限制底层API 调用相同
    2.性能常规场景更优常规场景更优需要自己编写复杂代码才能提高性能(setData)
    3.社区生态丰富,更多高性能组件(uni-ui,插件市场)丰富(taro-ui)丰富
    4.开发体验纯vue体验,高效、统一,上手快;工程化能力强(双向绑定)遵循React语法,对于 JSX 的语法支持相对完善,taro3开始支持vue语法私有化;工程化能力弱
    5.多端能力同时支持H5、多家小程序、跨平台App;官方提供了uni ui,可全端运行同时支持H5、多家小程序、跨平台App;官方提供了taro ui,只支持微信小程序和H5两端,不支持App只能用于单个平台小程序
    6.学习资料完善度官方视频教程,基础文档和各种使用专题内容丰富,问题搜索效果较好,示例demo功能完备,并发布为7端上线。详见。 30多个QQ群,微信群,气氛活跃基础API文档完整,具体使用问题资源较少,问题搜索效果一般,示例demo只包含基础功能,仅发布了微信一端。详见。 9个微信群,气氛活跃官方文档
    7.UI组件库uView UI (vue2 丰富,持续更新中)Nut UI (vue2/vue3. 丰富,持续更新中)Taro UI(react. 丰富,不支持抖音小程序,已两年未更新)- WeUI组件库

    具体分析对比详细情况可参考:

    ask.dcloud.net.cn/article/364… 或者 ask.dcloud.net.cn/article/371…

    五. 总结

    橱窗里的衣服再漂亮,适合自己的才有用,开发框架亦是如此。基于公司业务及团队人员技能考虑,经过开会综合考量,决定选择uni-app, 具体原因如下:

    1.uni-app在不同平台的运行效果更好;
    2.uni-app有它自带的IDE,能够帮助我们快速构建项目和打包项目;
    3.如何在有限前端团队人数下搞定更多平台,是我们的首要考虑,没有人想踩太多坑导致任务完不成,并且跨端方面uni-app更成熟;
    4.学习uni-app(vue)的学习成本更低,用户体量大,社区生态完整,开发时间和风险更低。


    App端框架选型:

    现在我们做的项目主要以小程序为主,但既然选择了跨端框架,就必然要考虑到后续如果开发app的情况。下列对一些热门的跨端app框架包括flutter,react native,uniapp,taro做了分析对比。

    一. 各框架优劣分析

    优势劣势百度搜索指数
    1.flutter- UI性能可以比肩原生,编译出来的程序可以达到60bps的高性能。 Dart在 JIT模式下,速度与 JavaScript基本持平。但是 Dart支持 AOT,当以 AOT模式运行时,JavaScript便远远追不上了。优点即缺点,Dart 语言的生态小,精通成本比较高。- 不支持热更新,嵌套地狱,代码难看难维护。 UI控件API设计不佳,不适合国情,学习成本高- 应用场景有限,dart未来扑朔迷离
    2.react native现成的组件,社区驱动,热加载。 可以通过 JSBundle 即时更新 App。相比原来冗长的审核和上传过程,发布和测试新功能的效率大幅提高。 纯单页的,嵌入原生App比较灵活需要具备react、原生开发能力,学习、用人成本高。 官方文档中可以发现仍有部分组件和API都区分了Android和IOS 版本,也就是说仍不能真正实现严格意义上的“一套代码,多平台使用”。 缺乏很多基本控件,第三方开源质量良莠不齐。。 rn是纯单页应用,如果一个应用的页面很多,用rn写会很崩溃,变量污染和干扰严重。
    3.uni-app性能体验优秀,平台能力不受限。 学习成本低,效率高。 社区活跃,生态好,组件丰富,国内应用生态丰富度高。 支持多页面,页面之间上下文隔离,写页面较多的大型应用更合适。支持热更新,APP最新修改可以动态发布,而不需要提交APP市场审核产品少,成熟度不高。 nvue原生开发有局限性,特别是样式方面限制比较严重,定制化程度低。 APP端文档松散,api众多
    4.taro平台能力不受限。 采用热加载的即时编译方式,使得App UI的开发体验得到改善。 摆脱了WebView的交互和性能问题,同时可以直接套用网页开发中的css布局机制。 可以通过 JSBundle 即时更新 App。产品少,成熟度不高。 在动画效率和性能的支持还存在一些问题,性能上不如原生Api。官方文档中可以发现仍有部分组件和API都区分了Android和IOS 版本,也就是说仍不能真正实现严格意义上的“一套代码,多平台使用”。 缺乏很多基本控件,第三方开源质量良莠不齐。 需要具备react、原生开发能力。

    二. 总结

    以下是论坛中一些使用过uniapp开发app的意见,仅作为参考:

    1.个人感觉uniapp是数字天堂完成度较低,较不成熟的产品。来源:知乎
    2.uni-app看似完美,小问题确实太多 来源:知乎
    3.uni-app和taro 推荐用在跨端小程序中。跨平台的app不建议使用,可以考虑react native(产品成熟度高,体验性好),和 flutter(热度高,ui和性能接近原生)

    目前的市面上多端应用开发主要还是小程序 + H5 的形式比较多,app的相对很少。一套代码横跨 iOS Android Web 和小程序比较复杂,可能会存在大量兼容性问题。uniapp开发的app目前来看没有大型的成熟案例,使用的话踩坑会比较多,所以综合考虑暂不使用uniapp去开发app应用。

    uniapp语法选择

    跨平台小程序的框架已选定uniapp,众所周知uniapp支持的是vue语法,vue3自出世以来备受好评,那么unipp是否要用vue3去开发呢,他对vue3的支持度是否良好,学习资料是否完善,还需深入研究。

    一、uniapp对vue3的更新史

    uni-app对vue3 & Vite的升级,是一个渐进式过程:

    • 2020年9月:小程序平台支持 vue3 开发,小程序平台编译器依然使用webpack;

    • 2021年5月:H5平台支持 vue3 开发,H5平台编译器升级为 Vite;

    • 2021年8月:App平台支持 vue3 开发,App平台编译器升级为 Vite;

    • 2021年11月:小程序平台编译器升级为 Vite;

    至此,uni-app在全平台支持了 Vite 编译及Vue 3.x 运行。

    二、vue2和vue3在开发uniapp中的对比

    新版 uni-app 框架主要做了三大改进:

    • 重写框架内核:基于vue3 + ts重写内置组件和API,实现更彻底、更高效的tree-shaking

    • 新增支持 Vite 构建工具,在H5平台实现秒开预览;

    • 新增支持 Vue3.x,实现更灵活的开发方式,及更高的运行性能;

    基于这三大改进,我们从语法支持,编译速度,运行性能,代码体积,学习资料五方面进行分析对比:

    1.### 语法支持:新版uni-app支持Vue 3.x框架,支持组合式API,可实现更聚焦的业务开发。

    Vue 3.x的一些新增特性,uni-app也已经完全支持,如: - 支持