简介
小程序是相对于App而言更轻便的一种应用存在形式,强调**用完即走、无需安装卸载、随时可用的特点。
小程序架构设计

以微信小程序为例:
- 小程序的渲染层和逻辑层是分开的。
- 数据通信上, 逻辑层通过显示调用
setData方法与Native交互再通知视图层进行更新。反过来视图层也只能通过Native触发逻辑层的逻辑。 - 分离设计的好处在于渲染页面的时候不需要处理JS, 因此可以提高首屏的渲染速度和稳定性。同时, 逻辑层不能直接操作DOM,这从某种程度上也算是一种优点。
- 需要注意: 小程序的渲染层仍然是以
webview来渲染而不是原生渲染的, 因此小程序的性能是无法跟Native程序比较的。
小程序和WebView的比较
大部分的平台都支持 `webview` 模式。从渲染进程上来说原生和 `webview` 的性能是一致的, 但是在其他因素的影响下会有一些不同, 下面我尝试根据官方的文档和我查询到的资料列举一些 `webview` 的优点和缺点。
**优点:**
- 可以直接兼容原来的H5代码, 代码开发量小。
- 内容更新无需审核, 部署完站点刷新生效。
**缺点:**
- 原生小程序进行了渲染逻辑分离, 并设计了一套加载和优化的机制(更新, 离线缓存等等), 同样是
webview内核渲染, 这点仍然会有差距。 webview无法跳转原生页面, 并有由于通信机制的问题, 还可能有其他的一些问题(例如页面跳转, 支付, 分享等)。webview的比重过大可能会对审核造成影响。
小程序平台对比
| 平台 | 应用入口 | 开发成本 | 文档地址 | 支持 |
|---|---|---|---|---|
| 微信小程序 | 微信 | 使用JS开发, 有一定的API学习成本 | https://developers.weixin.qq.com/miniprogram/dev/framework/ | 小程序/小游戏 |
| 支付宝小程序 | 支付宝 | 与微信小程序的整体架构基本一致, 修改API和文件后缀可以进行迁移 | https://opendocs.alipay.com/mini/developer | 小程序/小游戏 |
| 字节跳动小程序 | 头条/抖音/头条极速版 | 可以从微信小程序转换过来, 部分框架支持 | https://microapp.bytedance.com/dev/cn/mini-app/introduction/about-mini-app/general-introduction | 小程序/小游戏 |
| 百度智能小程序 | 百度APP | 与微信小程序的整体架构基本一致, 提供"搬家工具"从微信小程序迁移到百度小程序 | https://opendocs.alipay.com/mini/introduce | 小程序/小游戏 |
| 快应用 | vivo、华为、OPPO、小米、联想、金立、魅族、中兴、努比亚、一加、海信、中国移动终端 | 相比微信、支付宝小程序,快应用的开发语法标准,其语法也更接近传统网页。 | https://doc.quickapp.cn/ | 小程序 |
| QQ小程序 | 可以比较简单的从微信小程序迁移过来 | https://q.qq.com/wiki/develop/miniprogram/frame/ | 小程序/小游戏 | |
| 钉钉小程序 | 钉钉 | 小程序自建DSL, 类似Vue的语法, 微H5则是全前端的技术栈 | https://ding-doc.dingtalk.com/doc#/personnal/fdzxvg | 小程序/H5微应用 |
微信小程序是小程序这个概念的发起者,因此后续许多小程序的设计都很类似与微信小程序。**支付宝小程序**只需要在微信小程序的代码上稍作修改就能进行转换(甚至有个vscode的插件“wx2my”可以一键转换)。而**QQ小程序**甚至可以兼容微信小程序直接运行(只需要干掉一些手机获取之类的API)。
**
**注**: 快应用和其他小程序在设计上有所不同, 而更接近与PWA的概念。正是如此,快应用更多的是手机厂商在推动而不是平台方。
小程序框架简单对比
| 小程序框架 | wepyjs | mpvue | taro | uni-app | chameleon |
|---|---|---|---|---|---|
| 团队 | 腾讯 | 美团 | 京东 | DCloud(数字天堂) | 滴滴 |
| 支持平台 | H5, 微信, 支付宝 | 支持将微信小程序转换为支付宝、百度、qq、头条小程序 | 微信/百度/支付宝/字节跳动/QQ小程序 、快应用、 H5 端 以及 移动端(React Native) | 小程序(微信/支付宝/百度/字节跳动/QQ/钉钉)、App(iOS/Android)、H5 | web、微信小程序、支付宝小 程序、百度小程序、android(weex)、ios(weex)、qq 小程序、字节跳动小程序、快应用 |
| 语法风格 | 接近Vue | 与Vue一致 | React标准, 可以使用JSX | 与Vue一致 | 类似Vue |
| 数据流管理 | Redux/Mobx | Vuex | Redux/MobX | Vuex | Vuex |
| 开源组件库 | 需要小改目标源码 | 可以直接使用原生组件库 | 可以直接使用原生组件库 | 可以直接使用原生组件库 | 需要大改目标源码 |
| 组件化 | 自定义组件规范 | Vue组件规范 | React组件规范 | Vue组件规范 | 自定义组件规范 |
| 脚手架 | wepy-cli | vue-cli | taro-cli | vue-cli | chameleon-tool, 不支持npm |
| 构建 | 框架内置构建工具 | webpack | webpack | webpack | chameleon-tool |
| 样式 | 支持less/sass/stylus/postcss | less/sass/postcss | less/sass/postcss | less/sass/postcss | less/sass/postcss |
| API文档 | https://wepyjs.github.io/wepy-docs/2.x/#/base/intro | http://mpvue.com/ | https://taro-docs.jd.com/taro/docs/README.html | https://uniapp.dcloud.io/ | https://cml.js.org/doc/api/api.html |
| Star(02/05) | 19.7k | 19.4k | 23.8k | 18k | 7.1k |
| 最后一次更(02/07 15:30) | 20小时前 | 6个月前 | 1小时前 | 19小时前 | 22天前 |
| 其他说明 | 发布的时间较早, 多平台的支持一般 | 更新较慢 | 支持ESlint, 支持CSS Module, 支持微信小程序转为taro进行重构 | 使用HBuilder支持更完整, 语法,编译部署等 | 自研了语法检验工具, 但是不支持ts, 有专门针对多端开发的多态协议 |
从几个平台的比较可以看出,taro是以react为技术栈的,虽然发展的很不错,但不太符合原先代码的技术选型。chameleon和wepyjs另起炉灶自己构建了一套dsl,对于目前的代码来说兼容性一般,如果要使用需要对原来的代码进行大幅度的修改。所以下面主要详细的对比下mpvue和uni-app这两个框架的各方面。
mpvue和uni-app的比较
- 开发工具
mpvue和uni-app都提供了脚手架进行项目初始化,并且都是以vue-cli为基础的。此外uni-app在它自家的Hbuilder中提供了可视化的初始化操作,并集成了后续的测试发布。鼠标点点点即可完成。
两个框架都支持sass、less、stylus和typescript。uni-app在自家的ide上集成了代码提示支持。
这里说明几点uni-app其ide创建项目和cli创建项目的不同点:
- 两者的最大区别在于cli的编译器是附在项目中的,ide则附在ide的软件中。
cli创建的项目,编译器安装在项目下。并且不会跟随HBuilderX升级。如需升级编译器,执行npm update。 cli安装sass、less需要自己手动安装, ide上可以点点点。- 把
cli的src直接拖入ide可以继续执行,但是会使用ide的编译器。 cli的项目不能编译成APP。
- 端的支持
mpvue支持微信、百度、头条和支付宝。uni-app如果不算h5端和app(android、ios)的支持,只算小程序则比mpvue多一个钉钉小程序和QQ小程序的支持。
- 组件生态
uni-app的官方搭建了社区和组件库,mpvue没有。不过mpvue支持直接使用小程序原生的组件库,并且第三方的工具库也比较丰富。
- 接入成本
两个库都是兼容vue的语法规则,uni-app实现的语法规则更多。mpvue对于现有代码来说是没有接入成本的。uni-app则提供了mpvue迁移到uni-app的方法(https://ask.dcloud.net.cn/article/34945)。
- 文档
文档链接如下:uni-app , mpvue 。比较明显的是uni-app的文档更清晰。
其他框架补充
- 网易考拉小程序框架: megalo
- 简要说明: Megala基于
Vue2.6.6开发, 目前支持微信, 支付宝, 百度, 头条小程序, 目前已经不更新(最后一次提交是19年8月--截止2020.02.19). - 文档地址: https://megalojs.org/#/
- Github(1.5K): https://github.com/kaola-fed/megalo
- 简要说明: Megala基于
- 滴滴小程序框架(Vue): mpx
- 简要说明: 滴滴出品的基于Vue的小程序框架, 支持业内全平台小程序和跨小平台编译,(https://github.com/didi/mpx/releases/tag/v2.0.0), 目前较活跃.
- 文档地址: https://didi.github.io/mpx/
- Github(2K): https://github.com/didi/mpx
- 特点: 不同于mpvue这类转译型框架, mpx侧重于加强小程序语法, 详细介绍可见文档
- 微信小程序同构方案: Kbone
- 简要说明: 微信官方出品的小程序同构方案, 目的是为了解决让web端的代码通过适配器直接迁移到小程序中. 框架的原理在下面的文章链接(1).
- 文档地址: https://wechat-miniprogram.github.io/kbone/docs/
- Github(1.3k):https://github.com/wechat-miniprogram/Kbone
