或者,如果难以进行精确测量,是否存在一种与前端改进成比例的测量?我们想在发生这种情况时发起事件(对于真实用户监控). 这是一个可以为您提供所需内容的想法.我尝试了它确实有效
我还应该指出,我没有尝试使用嵌套组件,而是仅针对具有所有标记的单个组件.这将从我的代码中清楚地看出.
在进近之前必须先提出一些要点.我们知道在反应生命周期中,构造函数是第一个触发的,构造函数在渲染组件后立即触发.这使我认为构造函数触发和触发componentDidMount之间的时间是渲染完成所需的时间.
另一个重点是setTimeout的工作方式.我们知道传递给setTimeout函数的时间量不是函数触发前的实际量,而是函数触发前的最小量.这是因为event loop并且超出了这里的范围.
考虑到上述情况,这是我的代码.
export default class App extends React.Component {
constructor() {
super();
this.timer();
}
timer() {
let date = new Date();
console.log(date.toLocaleTimeString())
setTimeout(() => {
myTimer();
}, 0)
function myTimer() {
let date = new Date();
console.log(date.toLocaleTimeString())
}
}
createItems() {
let items = [];
for (let i = 0; i < 100000; i++) {
items.push(<h3 key={i}>{i}</h3>)
}
return items;
}
render() {
const items = this.createItems();
return (
<div>
{items}
</div>
)
}
}
这里的想法是,因为构造函数首先触发,我可以从那里调用我的计时器函数并获得开始时间.然后在我的计时器函数中,我调用一个setTimeout并将其作为延迟参数传递给0.因为JavaScript是单线程的,所以setTimeout中的回调只会在渲染完成后才会触发,因此我没有传递任何延迟,以确保它实际上在渲染完成后立即触发.然后回调函数再次记录当前时间,现在我可以看到渲染的开始和结束时间之间的差异.
希望这可以帮助.
