我在做一个消息列表页,数据有上千条,即使只渲染可视区域,滚动还是特别卡,而且内存占用一直很高。我试过用 React 的虚拟滚动库,但效果不明显,是不是 CSS 写得有问题?
比如下面这段样式,会不会导致重排或内存泄漏?
.message-list {
height: 100vh;
overflow-y: auto;
will-change: scroll-position;
}
.message-item {
height: 80px;
border-bottom: 1px solid #eee;
}
首先把 will-change: scroll-position 去掉,这个属性在这里没啥用,反而可能影响性能。然后试试这个更高效的滚动实现:
另外注意几点:
- 把 message-item 的样式直接写在组件里
- 每个消息项加上 key 属性
- 减少不必要的状态更新
这比单纯依赖第三方虚拟滚动库靠谱多了,亲测有效。我之前也踩过类似的坑,卡顿和内存占用就是这么解决的。