漫谈微信小程序
前言
我有过大约 10 个月的时间,参与开发了一款体量较大的电商小程序。在这期间看着它体积暴涨、从野蛮生长到逐步治理,总结一些经验和思考
小程序的优势
- 2022 年的中文互联网,事实上大家都在用微信作为浏览器
- 微信原生能力:支付、分享(最重要)、扫一扫
- 体验强于 h5
- 手势管理(下拉刷新,侧面滑动后退)、原生 tab 栏等贴近原生 App 的交互
- 一个 MPA 里边多个 SPA,状态管理好做(可能内存也更富裕一些?)
- 支持快速构建应用(学习成本低、原生组件、原生的 ci 能力、无需手动部署,提供基础性能、数据分析等等)
小程序的劣势
- 表单组件错误频出,弱于原生
- 体验弱于客户端
- 商业价值远大于技术价值
- 割裂互联网生态,是
- 所有数据都要过一遍微信,数据安全有问题
- 更新代码需要审核,与 web 急速发布的理念有冲突,会随时被审核卡住以及下架
- 开发者工具编译慢,bug 多
- 代码更新后覆盖慢,只能保证 24 小时全覆盖,没有全量覆盖的方法
- 架构缺陷
- 双线程:渲染层 webview 线程 + 逻辑层 js 解释引擎线程
- 通过将 data 转为 JSON 字符串在两个线程中传递,性能差
- 渲染层提供了 wxs,语法类似 js 的脚本语言,能力残缺很多,只用于渲染层的函数功能有限
- 缺乏构建大型软件的能力
- 缺少 babel 这样的编译工具,如果可用的微信版本设置的很低,就只能使用最原始的语言能力,无法 polyfill
- 不支持 less sass 需要开发者手动编译
- 分包有主包体积问题
- 性能优化空间很有限(ssr、首屏、TTFB 等,收集数据的 wx.getPerformance 也有版本限制)