小程序的优化
双线程架构相关
- setData 频繁操作(底层是因为双线程架构),可以使用 wx.nextTick 将多次操作延迟到下一次事件循环里
- 不需要渲染的数据使用_或者直接挂在在 this 下,不要放在 data 中
- 双线程原因,JS 在独立线程中,setTimeout/setInterval 将作用于全局,所以使用应注意 clear 掉
首屏加载相关
- 图片懒加载和下拉刷新
- 分包和预加载(在 onLoad 总发送 http 请求)
- 骨架屏
代码相关
- 减少代码包体积:开启代码压缩,善用缓存,减少 http 请求
- 使用组件:将重复的功能进行统一的封装
- 在频繁操作的地方使用防抖或节流,比如 onPageScoll
- 封装重复逻辑,比如用 promise 封装 wx.request。
如何测试优化结果
- 使用 audits (体验评分)工具,浏览器中对应 Proformance - 查看首屏加载时长 - 网络请求时长 - 通过给出的体验报告,去逐步进行优化。
遇到的问题,以及如何解决的。
页面栈爆栈
- 小程序默认页面栈是 10 层,超出则会跳转失败。
- 自己封装一个 router,每次跳转时判断一下,如果到了 9 层,在调转就使用 wx.redirectTo
异步问题
- 很多的 API 都是异步的,比如 wx.request
- 为了方便使用,将异步封装为 promise
wxss 编写问题
- wxss 编写太原生
- 使用 easy-less 或者 webpack 写 less 然后转换为 wxss
IphoneX 的适配
- 适配下边框 20rpx
- 通过判断设备类型来编写适配代码。
相机拍照后照片转 base64
let base64Img = wx.getFileSystemManager().readFileSync(temPath, "base64");
1
小程序自定义 Less
参考:在微信小程序中使用 less(最优方式)open in new window
小程序 wxml 属性如何折行
setting.json 中:
"files.associations": {
"*.wxss": "css",
"*.wxs": "javascript",
"*.wxml": "html"
},
"html.format.wrapAttributes": "force-aligned",
"[html]": {
"editor.defaultFormatter": "HookyQR.beautify"
},
1
2
3
4
5
6
7
8
9
10
11
12
2
3
4
5
6
7
8
9
10
11
12
组件相关
自定义 navbar
参考:https://www.cnblogs.com/sese/p/9761713.html
小程序热更新
- 参考:https://www.cnblogs.com/zjy850984598/p/11016748.html
- 官方文档(getUpdateManager):https://developers.weixin.qq.com/miniprogram/dev/api/base/update/wx.getUpdateManager.html
其他
小程序和 Vue 的区别
- 运行环境
- 声明周期
- 代码编写
- 组件通讯
- 对于特定的功能,小程序需要基础的支持
TypeScript 给你带来了什么?
- 开发阶段的静态类型检测
- 友好的阅读体验
- 类,接口,泛型的提供