CPU周期,内存使用情况,执行时间等等?

除了感知代码的运行速度之外,是否有一种量化的方法来测试JavaScript的性能?


当前回答

我同意,感知到的表现真的是最重要的。但有时我只是想知道哪种方法做某事更快。有时这种差异是巨大的,值得了解。

你可以使用javascript计时器。但我通常会得到更一致的结果使用本机Chrome(现在也在Firefox和Safari) devTool方法console.time() & console.timeEnd()

我如何使用它的例子:

var iterations = 1000000;
console.time('Function #1');
for(var i = 0; i < iterations; i++ ){
    functionOne();
};
console.timeEnd('Function #1')

console.time('Function #2');
for(var i = 0; i < iterations; i++ ){
    functionTwo();
};
console.timeEnd('Function #2')

更新(4/4/2016):

Chrome金丝雀最近增加了行级别剖析开发工具的来源选项卡,让你看到每一行执行了多长时间!

其他回答

JSLitmus是一个轻量级的工具,用于创建特别的JavaScript基准测试

让我们看看函数表达式和函数构造函数之间的性能:

<script src="JSLitmus.js"></script>
<script>

JSLitmus.test("new Function ... ", function() { 
    return new Function("for(var i=0; i<100; i++) {}"); 
});

JSLitmus.test("function() ...", function() { 
       return (function() { for(var i=0; i<100; i++) {}  });
});

</script>

我上面所做的是创建一个函数表达式和函数构造函数,执行相同的操作。结果如下:

FireFox性能结果

IE性能结果

UX Profiler从用户的角度来解决这个问题。它将所有浏览器事件、网络活动等由用户操作(点击)引起的事件进行分组,并考虑到延迟、超时等所有方面。

这是为特定操作收集性能信息的好方法。

start = new Date().getTime(); 
for (var n = 0; n < maxCount; n++) {
/* perform the operation to be measured *//
}
elapsed = new Date().getTime() - start;
assert(true,"Measured time: " + elapsed);

大多数浏览器现在都在performance.now()中实现了高分辨率的计时。在性能测试方面,它优于new Date(),因为它独立于系统时钟运行。

使用

var start = performance.now();

// code being timed...

var duration = performance.now() - start;

参考文献

https://developer.mozilla.org/en-US/docs/Web/API/Performance.now () http://www.w3.org/TR/hr-time/#dom-performance-now

我也在找类似的东西,但发现了这个。

https://jsbench.me/

它允许两边比较,然后你也可以分享结果。