setData
setData是小程序开发中使用最频繁的接口,也是最容易引发性能问题的接口。
常见的setData操作错误
1,频繁的去setData
部分小程序会非常频繁(毫秒级)的去setData
,其导致了两个后果
- Android 下用户在滑动时会感觉到卡顿,操作反馈延迟严重,因为 JS 线程一直在编译执行渲染,未能及时将用户操作事件传递到逻辑层,逻辑层亦无法及时将操作处理结果及时传递到视图层;
- 渲染有出现延时,由于 WebView 的 JS 线程一直处于忙碌状态,逻辑层到页面层的通信耗时上升,视图层收到的数据消息时距离发出时间已经过去了几百毫秒,渲染的结果并不实时;
2,每次setData都传递大量新数据
由setData
的底层实现可知,我们的数据传输实际是一次evaluateJavascript
脚本过程,当数据量过大时会增加脚本的编译执行时间,占用 WebView JS 线程。
3,后台态页面进行setData
当页面进入后台态(用户不可见),不应该继续去进行setData
,后台态页面的渲染用户是无法感受的,另外后台态页面去setData
也会抢占前台页面的执行。
图片资源
目前图片资源的主要性能问题在于大图片和长列表图片上,这两种情况都有可能导致 iOS 客户端内存占用上升,从而触发系统回收小程序页面。
图片对内存的影响 引起内存回收, 对页面切换的影响 引起卡顿
代码包大小的优化
小程序一开始时代码包限制为 1MB,后增加到2MB
除了代码自身的重构优化外,还可以从这两方面着手优化代码大小:
控制代码包内图片资源,及时清理没有用到的代码和资源