Javascript 在web浏览器中收集有关事件循环的信息

Javascript 在web浏览器中收集有关事件循环的信息,javascript,Javascript,以下代码在控制台中显示请求的间隔和实际间隔之间的差异 这是否使我们能够对事件循环的长度说些有意义的话(从广义上讲,我对单个的滴答声不太感兴趣)?如果是,什么 var start, interval; interval = 2000; // ms function go() { start = performance.now(); setTimeout(function() { var end = performance.now(); cons

以下代码在控制台中显示请求的间隔和实际间隔之间的差异

这是否使我们能够对事件循环的长度说些有意义的话(从广义上讲,我对单个的滴答声不太感兴趣)?如果是,什么

var start, interval;

interval = 2000; // ms

function go() {
    start = performance.now();

    setTimeout(function() {
        var end = performance.now();
        console.log(end-start-interval);
        go();
    }, interval);
}
go();
没有

原因之一是:回调将被安排在执行器空闲时运行。这可能是“所有的时间”,除了一种情况,即另一个回调可能恰好在您的回调之前被安排,并接管执行,不管它想要多长时间


在这种情况下,您的回调可能会延迟无限长的时间,但这不会告诉您“稳态”情况。

不,不会。它告诉你的只是计时器机制的准确性。事件处理需要的时间和它需要的时间一样长。它告诉我一些事情。例如,如果我调用
alert('foo')
,那么记录到控制台的时间会大大增加,因为该警报阻止了事件循环。对,但这就是我的观点。事件循环没有单一的“长度”。浏览器分派给代码,代码运行直到返回。这可能几乎不需要时间,也可能需要很多时间。@Ben:对我来说,这听起来像是说你被安排得晚了,这说明你被安排得晚了。对于node.js,有一个包说测量“事件循环滞后”:-这是它的源代码:好的,我想这是重点。随着事件循环上“压力”的增加,更长时间间隔的可能性增加,因此获得了一些一般信息?你怎么能得到一个事件循环持续时间的准确读数?@Ben:当然可以。你可以保留这方面的统计数据,以最终估计平均延迟和方差,但不清楚这些信息如何有用。推理:如果已知应用程序的性能良好,读取时间高达50毫秒,而已知应用程序的性能较差,读取时间在setTimeout中延迟超过50毫秒,然后,当持续达到50毫秒时,您可以谈谈用户体验。这可能是有用的信息。显然,事件循环可以被完全阻止,这意味着没有任何关于应用程序稳定状态的信息交流——在这种情况下,应用程序已经冻结。但这并不一定使该方法无效。有意义的信息可能在各种条件下都可用……或者有更好的方法来衡量web应用程序的客户端性能吗?