如上图,小程序框架中数据绑定的原理示意图,js是一个独立的线程,对数据操作后需要经过线程通信,将数据发送给webview 渲染引擎,最终呈现出效果。线程间通信就会暴露两个缺陷:1. 频繁操作会导致通信阻塞 2. 单次通信传递数据量多大,会导致通信长时间被占用,进而导致通信阻塞
优化建议:
1.对一个数组进行增加数据时只对push或者concat的数据进行setData,以减小setData传递的数据量,减少通信时间
let arr = [1, 2, 3, 4, 5]
const self = this
this.setData({
arr: arr
})
// bad
setTimeout(() => {
let arr_data = self.data.arr
arr_data.push(6)
self.setData({
arr: arr_data
})
}, 1000)
//good 通过数组操作下标的方式,操作数据绑定
setTimeout(() => {
let data_arr = self.data.arr
let data = {}
let length = data_arr.length
data[`arr[${length}`] = 6
self.setData(data)
}, 1000)
2.避免连续多次调用setData,能够合并的,尽量合并调用
//bad
this.setData({
data_1: 10
})
this.setData({
data_2: 100
})
this.setData({
data_3: 1000
})
//good
this.setData({
data_1: 10,
data_2: 100
data_3: 1000
})
3.避免后台态页面进行 setData,对于用户看不到的页面,尽量不要继续频繁操作setData,比较影响展示页面的交互效果