在JavaScript中计算循环内所花费的时间

7

如何检查在javascript中特定循环内花费的秒数(或毫秒数)。 我在javascript中实现了一个排序算法,现在我正在使用冒泡排序,我想使用快速排序。 我知道在时间效率方面,快速排序是好的。但我想计算在最内层循环内真正花费的秒数或毫秒数。 我该怎么做呢?


除了所有的答案之外,我在Firebug中发现了另一个有用的功能:“时间和分析”,http://getfirebug.com/logging,有助于确定JavaScript的性能。 - sat
5个回答

9

8

我不是在排序数字,而是在排序对象数组,其中我根据对象的某个属性进行排序。因此,我不能使用内置的排序函数。 - sat
值得注意的是,Date对象并不是非常准确的。John Resig写了一篇关于此的文章:http://ejohn.org/blog/accuracy-of-javascript-time/. - Steve Harrison
5
“sort”方法允许您指定“ compareFunction”,从而可以实现您需要的功能(无需自己创建排序方法)。有关更多信息,请参见:https://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Objects/Array/sort#Parameters。 - Steve Harrison
2
这个答案已经过时了,请查看我的完整答案。 - Lukas Liesis

5

大多数浏览器上的时间并不是非常准确,您可以预期误差约为15毫秒:

var start = (new Date).getTime();
/* Your code. */
var diff = (new Date).getTime() - start;

推荐阅读:


那是一篇非常好的文章!!谢谢。从来没有想过。 - sat

2
如果您正在使用Firebug,您可以执行以下操作:
console.time('someNameHere');
// Do things here
console.timeEnd('someNameHere');

2

其他人已经回答了如何进行时间计算,所以我将回复您的评论:“我正在对对象数组进行排序,其中根据对象的某个属性进行排序。因此,我不能使用内置排序。”

这完全不是真的,您仍然可以使用内置排序:

var arr = [{ text: 'test', id: 2 }, { text: 'abc', id: 6 }, { text: 'xyz', id: 4 }];
arr.sort(function(x,y) { return x.text > y.text ? 1 : x.text < y.text ? -1 : 0 });

所以在上面的代码片段中,它比较了两个对象的文本属性?内部使用了什么算法?它会比较每个对象还是有更好的算法? - sat
@sat:对于Firefox,使用归并排序。这是用来确保排序顺序稳定的,而不是快速排序。请参见https://bugzilla.mozilla.org/show_bug.cgi?id=224128。 - kennytm
1
@David:arr.sort(function(x,y) { return x.text > y.text ? 1 : x.text < y.text ? -1 : 0 }); - kennytm
@Kenny 感谢您提供的精彩信息。通过简单的问题,您可以学到很多东西。 - sat

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接