先说结论:小程序开发最怕的不是选错框架,是选错“交税方式”
去年 11 月我接了个园区门禁的小程序,客户张口就要 uni-app,说抖音端也要发。 我没拦,结果微信开发者工具里主包 2.3MB,上传直接红。 那天我们在会议室改到凌晨 2 点,把 three.js 的例子、地图选点、echarts 全拆出去,主包才降到 1.72MB,总包从 4.7MB 降到 3.1MB。 后来我复盘,真正省时间的不是“原生还是 uni-app”,而是你先算清楚:包体、备案、账单、审核这 4 个坑,哪个会先卡死你。
一、包体:主包 2MB 不是建议,是上传按钮的红线
微信小程序普通主包不能超过 2MB,整个小程序所有分包不超过 20MB,单个分包也不能超过 2MB。 这个数字我没在文档里背,是被上传失败弹窗教会的。 uni-app 打包后 vendor.js 一度到 890KB,后来我把 moment 换成 dayjs,按需引入 uView,vendor.js 降到 410KB。 echarts 换 uCharts 又省了 480KB。 图片更狠:有一张 1.2MB 的园区平面图被前端 base64 进代码,转成 PNG 上传到 COS 后,代码包直接少 1.6MB,因为 base64 大约会膨胀 33%。 步骤就 3 个:开发者工具点“详情 > 基本信息 > 代码包大小分析”;把非 tabBar 页全部扔进 subpackages;图片、字体、大 JSON 走 CDN 或云存储。 别在 app.json 里塞一堆页面,主包只留登录、首页、支付回调、webview 壳。
二、云开发 vs 自建后端:一个省人,一个省长期账单
我 2024 年 1 月云开发账单是 38.7 元,其中 CDN 流量 19.4 元,数据库读 8.9 万次、写 1.2 万次。 同时期那台轻量 2C4G 6M 是 112 元/月,还没算域名、SSL、备份、Redis 和半夜看监控。 云开发的好处是 wx.cloud.callFunction 不用配 request 合法域名,数据库权限能在控制台点,适合 1-2 人小队。 坏处是复杂事务、聚合查询、导出报表会难受,按量账单涨起来没感觉。 自建后端的好处是逻辑都在自己手里,MySQL 事务、Redis 队列、定时任务随便写;坏处是 HTTPS 域名要备案,TLS 要 1.2+,服务器要防刷,接口要自己写鉴权和日志。 我的独立观点:如果你连一个 2C4G 服务器的 Nginx 日志都没看过,先别自建;如果你业务里已经有订单、退款、库存扣减,云开发的数据库事务会让你想砸键盘。
三、备案和审核:时间成本比代码成本更致命
2023 年 9 月微信开始要求小程序备案,存量小程序要在 2024 年 3 月 31 日前完成。 我那个客户是 2023 年 12 月 18 日提交的,平台初审 1 天,管局审核到 12 月 29 日才过,一共 11 天。 步骤是:微信公众平台 → 设置 → 基本设置 → 小程序备案 → 填主体信息、负责人人脸、服务内容 → 平台初审 → 工信部短信核验 → 管局审核。 审核被拒 3 次,前两次是类目不符:门禁工具选了“生活服务>门禁”不行,后来改到“工具>门禁”并补了物业授权。 第三次是用户上传头像没接内容安全,审核员原话是“涉及用户生成内容需接入内容安全接口”。 解决办法:云函数里调 openapi.security.msgSecCheck,自建后端就用 access_token 调 https://api.weixin.qq.com/wxa/msg_sec_check,记得 access_token 要缓存 7200 秒,别每次请求都换。
四、选型:别问原生还是 uni-app,先问你要发几个端、几个人维护
只发微信、团队 1-2 人、后端弱,我建议原生 + 云开发。 原生 WXML/WXSS 性能最稳,setData 单次别超过 1MB,长列表用虚拟列表,别把 500 条数据一次塞进 data。 要同时发抖音、支付宝、H5,且 UI 占大头,uni-app 或 Taro 能省重复劳动;但跨端省的是视图层,省不了业务层,支付、登录、订阅消息、内容安全每个端都要单独写适配。 我们后来把微信端和抖音端抽成同一套 API,但支付和登录分了两套,代码量只少了大约 30%,不是网上说的 80%。 如果你业务重、动画多、地图多,别硬跨端,微信原生 + 分包 + 云函数更稳。
五、给新手的 5 步排查清单
- 建项目后先看“代码包大小分析”,主包超过 1.8MB 就准备拆。
- app.json 里配 subPackages,preloadRule 只预下载用户下一步最可能点的分包。
- 图片、视频、大 JSON 全部走对象存储,别 base64,别放 assets。
- 云开发项目检查数据库权限,自建项目检查 request 合法域名和 HTTPS 证书到期时间。
- 上线前 15 天开始备案和类目,别等代码写完才提交,管局审核可能是 1 天,也可能是 20 天。
最后说句难听的:小程序开发不是“小”,它是在 2MB 主包、备案审核、类目资质、微信支付回调这些约束里做产品。 你先把约束列出来,再选框架,顺序反了,后面全是返工。