JavaScript中的时间安排

时间:2009-11-30 09:15:39

标签: javascript datetime benchmarking

我通过创建Date对象来测试一些JavaScript程序,并使用它来获取函数实际工作之前和之后的毫秒时间。我让身体成为一个简单的添加循环,然后结束从新ms中减去旧ms并打印出来。然而,一切都在0毫秒内完成......这是有道理的,因为我用写入检查它的时间在工作之前和之后是相同的。我做得对吗,JavaScript(在Chrome中)闪电般快,或者有一些幕后的东西搞砸了我的变量。

3 个答案:

答案 0 :(得分:5)

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

解决方案是多次运行你的功能,并为整个事情计时。例如,运行它一百万次并将总时间除以1000000以获得一次运行的平均时间。

答案 1 :(得分:2)

请参阅我的answer to this question,了解如何实施一些简单的基准比较。正如@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);

答案 2 :(得分:1)

我们真的需要看看你的代码。无论如何,零的一个可能原因是你的循环是异步运行的:解释器不会等到循环结束然后再跳过下一条指令。或者,当然,你的循环可以快速闪电。

BTW,您可能对使用JavaScript分析器感兴趣。 Firefox的Firebug有一个不错的选择。您只需打开控制台并点击个人资料