为什么循环生成大量DOM元素时页面会卡顿?有没有更好的优化方法?
我在用JavaScript循环生成2000条带样式的列表项时,页面直接卡住了。尝试把DOM操作移到文档碎片里,渲染完再append,但滑动列表还是会有轻微卡顿。特别是加了CSS过渡效果后更明显:
.list-item {
transition: all 0.3s;
padding: 10px;
border-bottom: 1px solid #eee;
}
.list-item:hover {
background-color: #f0f0f0;
transform: scale(1.02);
}
用Chrome性能分析发现主要耗时在Paint阶段。试过把过渡效果改成will-change属性,但滚动时帧率还是掉到30多。有没有什么更直接的优化方式?
试试这段代码:
把CSS里的hover效果移掉,改成鼠标事件动态添加类名,避免全局监听导致重绘。另外,别用
transform: scale这种会触发layout的操作,改用更轻量的background-color就够了。