美文网首页
小程序长列表优化

小程序长列表优化

作者: 罂粟1995 | 来源:发表于2020-03-24 12:52 被阅读0次

    遇到这么一个问题,如果小程序有个下拉列表,假如列表数据很多,列表很长,可能会有越往下拖动程序越慢的现象。

    原因: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渲染这个二维数组。

    相关文章

      网友评论

          本文标题:小程序长列表优化

          本文链接:https://www.haomeiwen.com/subject/ifroyhtx.html