遇到这么一个问题,如果小程序有个下拉列表,假如列表数据很多,列表很长,可能会有越往下拖动程序越慢的现象。
原因:setData最好不要一次性传很大的数据。小程序基于双线程机制,逻辑层和渲染层是分开的,所以当调用setData的时候,涉及到逻辑层和渲染层之间的数据传输,如果一次性setData的数据过大,就会出现卡顿现象,甚至报错。
未优化情况下,我们实现分页加载长列表,会写一个一维数组,每获取到新一页数据时,就把它们concat到list上去,这样就会导致每次setData时的list越来越长越来越长,渲染速度也就越来越慢。
解决方案:分批setData,减少一次setData的数量。不要一次性setData list,而是把每一页一批一批地set Data到这个list中去。
具体实现:利用小程序setData方法支持的数据路径的写法。定义一个二位数组,每次得到的新一页的一维数组,通过数据路径写法加到这个二位数组中去,结构大概是:[[page1List],[page2List],[page3List]……]
代码示例:
// 1.通过一个二维数组来存储数据
let feedList = [[array]];
// 2.维护一个页面变量值,加载完一次数据page++
let page = 1
// 3.页面每次滚动到底部,通过数据路径更新数据
onReachBottom:()=>{
fetchNewData().then((newVal)=>{
this.setData({
['feedList[' + (page - 1) + ']']: newVal,
})
}
}
通过wx:for渲染这个二维数组。
网友评论