上一讲讲到,React 的性能问题通常有两类:一类是长列表,一类是重复渲染。这里再提一下长列表,它指的是你的页面渲染了很长的列表,通常有上百甚至上千行数据。长列表本身不是 React 特有的问题,无论是什么技术栈,都可能遇到。它的通用解决方案是采用虚拟滚动,业界做得比较好的解决方案有react-virtualized和react-window,已经非常成熟了。
那重复渲染的解决方案有没有这么成熟呢?不仅没有,甚至还存在一些误区。所以这一讲我们就这个主题来讲解下。
破题
在前面的生命周期与渲染流程等章节中都有提过避免重复渲染的具体方案,但为什么还是会发生重复渲染呢?因为当业务复杂度与项目规模还没有上升到引发页面性能下降时,这个问题不值得探讨,因为即使处理了也会白费功夫。这就让我想起了这句话:
过早的优化是万恶之源。
—— Donald Knuth 《计算机编程艺术》
互联网时代,是一个追求快速交付的时代。保证业务快速上线远比代码质量更为重要。只要业务能跑,性能往往是相对靠后的要求。这就需要我们明确优化时机的问题,即什么时候该做,什么时候不该做。
其次需要讨论如何排查问题页面,借助什么工具去定位?
然后就是一些常见忽略的点,即有哪些我们以为不会引发重渲染的写法,实际上会有问题?