2022 年第一更,来个大的!
入职搜狐后我开展的第一个项目就是微信小程序。谈起小程序开发,生态封闭、坑多路滑、开发工具难用等槽点是一定不能被忽视的,因此市面上也涌现了一大批诸如 mpvue、taro 这样的抽象程度更高的小程序开发框架。我负责的这个小程序项目并没有采用这些第三方框架,而是选择在原生技术栈的基础上进行了一系列的优化和定制。
去年 8 月份 (2021.08),小程序的版本已经来到了 4.0.0。经历了长达一年的渐进式优化,这个小程序项目的开发体验也勉强达到了“好用”的水平,于是我写下了本文并在组内做了技术分享。技术分享后我就想找时间把文章脱敏并公开,结果拖延症发作一直鸽🕊️到了 2022 年。。。今天终于狠下心来重新梳理了这篇万字长文,希望能帮助到需要开发小程序的你。
章节比较多,可以点击目录快速跳转;加 ⭐️ 表示个人认为收益比较大的优化。
我已经不接触小程序很久了,但既然要从头做一个还算复杂的小程序,那就要先给自己约法三章。
小程序更新节奏很快,而且不乏各种 Breaking Changes,很多第三方框架不能完美 Follow 这些更新,以至于一些早年间大火的框架到现在都不再维护。而且小程序技术经历几年的更新,已经比刚推出的时候强大很多了,如果没有强烈的跨平台需求,使用原生技术栈或许是更好的选择。
小程序开发者工具已经支持绝大部分我们日常能使用到的 ES6+ 语法了,并且也支持了目前处理回调最常用的 async await 语法。但官方的 wx.showLoading
等 API 都还是只能使用回调,因此开发业务前的第一件事就是让所有的微信 API 支持 Promise 形式调用。
最后我的解决方案是使用了微信官方提供的 wxp 库:API Promise 化。
<aside> 💡 注意:从基础库 2.10.2 开始,大部分 API 就已经原生支持返回 Promise,因此未来我会在项目中逐步移除 wxp 库。详见文档:异步 API 返回 Promise。
</aside>