消息列表上千条后滚动明显掉帧,内存占用也一直上涨。乍看像缓存或者权限的锅,追下去往往不是。

start = Math.floor(scrollTop / rowH);
visible = data.slice(start - 5, start + 20);

追下去是这么回事:所有节点一次性渲染,滚动时浏览器要处理大量布局与绘制。

碰到「长列表卡顿」这类问题,我习惯先把当前配置原样备份一份,改坏了立刻换回来,不用现场推。验证用真实数据走一遍,测试数据太干净,边界情况根本碰不到。

能分两步做的操作就别合成一步,中间看一眼返回值,出问题好判断。报错里带路径的,先去看那个路径在不在、权限对不对。

同一份配置存在多处的,先确认改的是被加载的那一份。新版本先放一台机器上跑一天再全量,问题一般在这段时间暴露。

备份不是备了就行,恢复一次才算数,很多备份文件打开才发现是空的。

具体做法是,只渲染可视区及缓冲行;滚动时按偏移量更新;固定行高便于计算。

验收就看一点,滚动帧率稳定,内存占用明显下降。

作者 9823189