Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/379.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JavaScript中的计时_Javascript_Datetime_Benchmarking - Fatal编程技术网

JavaScript中的计时

JavaScript中的计时,javascript,datetime,benchmarking,Javascript,Datetime,Benchmarking,我正在通过创建一个日期对象来加速测试一些JavaScript程序,并使用它来获取函数实际工作前后的时间(以毫秒为单位)。我把主体做成了一个简单的加法循环,最后从新的ms中减去旧的ms并打印出来。然而,一切都在0毫秒内完成。。。这是有道理的,因为我用书写检查它的时间在工作前后是相同的。我做得对吗,JavaScript(在Chrome中)的速度快得惊人,还是有一些幕后的东西把我的变量搞乱了。虽然Date对象以毫秒为单位返回时间,但这实际上不是它后面计时器的分辨率。例如,计时器可能每10毫秒跳一次。如

我正在通过创建一个日期对象来加速测试一些JavaScript程序,并使用它来获取函数实际工作前后的时间(以毫秒为单位)。我把主体做成了一个简单的加法循环,最后从新的ms中减去旧的ms并打印出来。然而,一切都在0毫秒内完成。。。这是有道理的,因为我用书写检查它的时间在工作前后是相同的。我做得对吗,JavaScript(在Chrome中)的速度快得惊人,还是有一些幕后的东西把我的变量搞乱了。

虽然Date对象以毫秒为单位返回时间,但这实际上不是它后面计时器的分辨率。例如,计时器可能每10毫秒跳一次。如果您的过程只需要3毫秒,那么大多数时间您将看不到非零测量(有时您会看到10毫秒)


解决方案是多次运行函数,并对整个过程计时。例如,运行一百万次,然后将总时间除以1000000,得到一次运行的平均时间。

我们确实需要查看您的代码。不管怎样,零的一个可能原因是循环是异步运行的:解释器不会等到循环结束后才跳下一条指令。或者,当然,你的循环可以是闪电般的快

顺便说一句,您可能对使用JavaScript分析器感兴趣。因为Firefox有一个很好的例子。您只需打开控制台并点击Profile即可。

有关如何实现一些简单基准比较的信息,请参阅my。正如@Greg Hewgill所指出的,多次运行测试以获得特定测试实际测试时间的准确表示非常重要

通常,它可以归结为以下简单的内容:

var MAX = 100000, i =  0, 
    s   = null,   e = null;

console.info("`someMethodToTest()` over %d iterations", MAX);
s = new Date();
do {
    someMethodToTest();
} while ( ++i < MAX );
e = new Date();

console.log("Total: %dms; average: %dms", +e - +s, (+e - +s) / MAX);
var MAX=100000,i=0,
s=null,e=null;
console.info(`someMethodToTest()`over%d iterations',MAX);
s=新日期();
做{
someMethodToTest();
}而(++i
您可能需要发布一些代码,否则无法说出错误所在-原则上您所做的似乎是正确的如果您确实发布了您所引用的代码,则更容易看出您是否做错了。