使用 performance.now 衡量 Next.js 页面的性能
Measuring performance of Next.js page with performance.now
我想测量页面为 SSR 花费的时间。在 next.js 中有一种方法可以使用函数 reportWebVitals
来衡量性能,但是在使用这种方法之前,我想先玩一下 performance.now
。
那么,是否可以使用 performance.now
类似下面代码片段的方法来测量渲染时间,它会准确吗?
const Page = () => {
const t1 = performance.now();
const pageBody = <h1>Hello world</h1>
const t2 = performance.now();
console.log(`Page took ${t2 - t1}ms`);
return pageBody;
}
注意:假设我们只做SSR
这是我的研究结果,页面时间与组件渲染无关,正如评论中所说,渲染是您需要衡量的东西
page: 0.112ms
component: 0.113ms
render 0 -------------: 10.383ms
page: 0.018ms
component: 0.054ms
render 1000 -------------: 1.284ms
page: 0.021ms
component: 3.903ms
render 1000000 -------------: 4.749ms
page: 0.019ms
component: 1.195s
render 1000000000 -------------: 1.201s
page: 0.011ms
// codes https://github.com/postor/measure-performance-of-react-ssr
为什么会这样?因为 jsx 是这样编译的
// before
const Page = ()=> <Comp />
// after
const Page = ()=>React.createElement(Comp)
所以React.createElement
不直接渲染子组件,更像是有子组件的结构,评论里说,React is more a scheduler than a reactor
,组件在需要的时候调用,所以时间线是这样的
call render
found page
call page and return structure
found component
call component and return structure
render structure to html and return
我想测量页面为 SSR 花费的时间。在 next.js 中有一种方法可以使用函数 reportWebVitals
来衡量性能,但是在使用这种方法之前,我想先玩一下 performance.now
。
那么,是否可以使用 performance.now
类似下面代码片段的方法来测量渲染时间,它会准确吗?
const Page = () => {
const t1 = performance.now();
const pageBody = <h1>Hello world</h1>
const t2 = performance.now();
console.log(`Page took ${t2 - t1}ms`);
return pageBody;
}
注意:假设我们只做SSR
这是我的研究结果,页面时间与组件渲染无关,正如评论中所说,渲染是您需要衡量的东西
page: 0.112ms
component: 0.113ms
render 0 -------------: 10.383ms
page: 0.018ms
component: 0.054ms
render 1000 -------------: 1.284ms
page: 0.021ms
component: 3.903ms
render 1000000 -------------: 4.749ms
page: 0.019ms
component: 1.195s
render 1000000000 -------------: 1.201s
page: 0.011ms
// codes https://github.com/postor/measure-performance-of-react-ssr
为什么会这样?因为 jsx 是这样编译的
// before
const Page = ()=> <Comp />
// after
const Page = ()=>React.createElement(Comp)
所以React.createElement
不直接渲染子组件,更像是有子组件的结构,评论里说,React is more a scheduler than a reactor
,组件在需要的时候调用,所以时间线是这样的
call render
found page
call page and return structure
found component
call component and return structure
render structure to html and return