前言

我有过大约 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 也有版本限制)