项目初始化
选框架还是原生
如果你的小程序不复杂,建议直接用原生开发。原生的优势是文档全、性能好、没有框架层的额外问题。
如果需要同时发布多端(微信、支付宝、抖音),可以考虑 uni-app 或 Taro。但要做好心理准备——跨端框架会带来额外的兼容性问题。
TypeScript 支持
强烈建议从一开始就用 TypeScript。微信开发者工具原生支持 TS,在 project.config.json 中开启即可。类型检查能帮你在编译阶段就发现很多问题。
常见的坑
1. setData 性能
setData 是小程序最核心的API,也是最容易出性能问题的地方。
错误做法:
// 每次都传整个列表
this.setData({ list: this.data.list })
正确做法:
// 只更新变化的部分
this.setData({ [`list[${index}].name`]: newName })
原则:传输的数据量越小越好,频率越低越好。
2. 页面栈限制
小程序的页面栈最多10层。如果你的应用有很深的导航层级,用 wx.navigateTo 会导致页面栈溢出。
解决方案:
- 适当使用
wx.redirectTo(替换当前页) - 扁平化导航结构
- 关键入口用
wx.reLaunch
3. 分包加载
主包大小限制2MB,总包20MB。如果你的小程序功能较多,一定要做分包。
{
"subpackages": [
{
"root": "pages/module-a",
"pages": ["index", "detail"]
}
]
}
把非首屏的页面放到分包里,能显著提升首次加载速度。
4. 授权流程变更
微信不断在收紧用户信息的获取权限。wx.getUserInfo 早就废弃了,现在要用 wx.getUserProfile,而且每次都需要用户主动点击触发。
建议:不要在启动时就要求授权,等用户真正需要的时候再引导。
5. 审核被拒
常见的审核被拒原因:
- 类目不匹配(比如做电商但选了工具类目)
- 虚拟支付(iOS端不允许虚拟商品用微信支付)
- 内容违规(UGC内容需要有审核机制)
- 功能不完整(提审时确保所有功能可用)
开发效率提升
- 善用微信开发者工具的”自定义编译条件”,可以直接打开指定页面调试
- 用
wx.getStorageSync做本地缓存,减少不必要的网络请求 - 封装统一的请求方法,处理 token 刷新、错误提示等通用逻辑
小结
小程序开发门槛不高,但细节很多。提前了解这些坑,能帮你节省大量调试时间。