如何在React中准确监控组件渲染耗时?
我在做性能优化时想监控某个React组件的渲染时间,但用performance.now()测出来的结果不太稳定,有时候差几十毫秒,不知道是不是方法不对。
我目前是在useEffect里记录开始和结束时间,像这样:
useEffect(() => {
const start = performance.now();
// 模拟渲染逻辑
const end = performance.now();
console.log('Render time:', end - start);
}, []);
但感觉这根本没测到真实的渲染耗时,因为JS执行和实际DOM更新是异步的。有没有更靠谱的办法?
performance.now()直接在useEffect里测渲染时间确实不靠谱,因为 React 的渲染和 DOM 更新不是同步的。比较靠谱的方法是用 React 自带的 Profiler API。你需要先把组件包一层,像这样:
血泪教训告诉我,这个方法比自己瞎算要准得多。注意实际生产环境最好把 Profiler 关掉,或者只在开发模式下启用,不然会影响性能。
如果还想更细粒度地分析,React DevTools 也挺好用的,它自带性能分析工具,能帮你看到具体的渲染瓶颈在哪。不过记得别在产品环境开启这些调试工具,会拖慢速度的。