javascript执行时间不同

Posted

技术标签:

【中文标题】javascript执行时间不同【英文标题】:javascript execution time varies 【发布时间】:2012-08-24 15:08:31 【问题描述】:

我正在尝试找出捕获语句执行时间的最佳方法。比如 js stmt 比如 if(txt =='abc') 所用的时间是多少。如果我使用 console.time('test')/console.endTime('test') 对来计算或使用简单的 js 代码(如下所示)来计算每次执行代码时控制台输出都会变化的时间。

有时在控制台上看到的差异有时是 1 位、2 位到 3 位(以毫秒为单位),即有时 1 毫秒、60 毫秒和有时 800 毫秒,顺序也不一致。我什至尝试只运行一次并关闭浏览器并再次运行它,这样其他 GC 和变量就不会出现妨碍时间,但结果是相同的。几毫秒是不可理解的,但如此巨大的差异需要花费很多时间。那么究竟什么是让解释器执行时间的最佳且一致的方法。我们如何找到最好的标准来证明哪个 stmt 以某种方式编写或最好使用时性能更好

var start = (new Date).getMilliseconds();
if(txt =='abc');
var diff = (new Date).getMilliseconds() - start;
console.log(diff);

*所有测试都在FF中进行。还有不同的方法,例如 getMilliseconds、getTime 和 console.endTime 一个接一个 *

【问题讨论】:

您可能会从***.com/questions/2140716/…获得一些帮助 单个 if 语句将需要不可估量的时间。这取决于调度程序是否停止执行以及在继续之前是否会发生一些其他计算(UI 线程、垃圾收集等)...... 使用jsperf之类的工具。 我认为讨论的重点是内存泄漏,但我在测试时通过关闭浏览器并重新运行它来避免这种情况,因此这不会是阻碍时间计算的问题 如果你找到了一种一致、可靠的方法来对各种 JS 引擎进行基准测试,请告诉我......你会是第一个解决它的人 【参考方案1】:

Erm.. 您正在使用两个非常不同的函数来检索当前时间戳

Date.prototype.getMilliseconds()

返回另一个(更短的)数字

Date.prototype.getTime()

因此,这通常不是一个好主意,很可能是您遇到问题的原因。如果你想在代码中测量,你应该总是使用.getTime(),或者更好的是Date.now()。两者都返回完整的时间戳编号。

【讨论】:

没关系,每次运行甚至关闭浏览器时都尝试一下,测试结果会发生巨大变化,甚至没有遵循任何模式 这很重要。仅仅因为使用 mixins 这两种方法,它永远无法正常工作。 他们一个接一个地被尝试在 mixin 中出现 @user593029:但是,当使用 Date.now()new Date().getTime() 时,我无法重新创建您的问题。它总是 0 或 1 毫秒。 我认为您从我的代码中弄错了(有错字)我已将其从 getTime 修改为 getMilliseconds。如果您使用 getTime,您每次都会得到 0ms,所以尝试 getMilliseconds 以获取 ms 中的值【参考方案2】:

这里的重点是执行这条指令的时间在大多数情况下远小于 0 毫秒,所以我不明白你为什么会有这些差异。如果我在我的机器上运行:

for (x = 0; x < 100; x++)                        
    var start = (new Date).getMilliseconds();
    if(txt =='abc');
    var diff = (new Date).getMilliseconds() - start;
    print(diff);

我明白了:

0
0
0
0
...

【讨论】:

以上是关于javascript执行时间不同的主要内容,如果未能解决你的问题,请参考以下文章

如果javascript“异步”函数的主体中没有“等待”,它会以任何不同的方式执行吗? [复制]

Javascript中代码的执行顺序是啥?

JavaScript 在其他不同事件中执行Event.observer(使用原型)

JavaScript 条件语句

500 JavaScript立即执行函数的4种不同写法,定时器

Javascript加载执行顺序