测试js变量声明速度

时间:2011-02-09 10:17:54

标签: javascript performance

我想对变量声明等非常基本的东西进行一些速度测试。

现在我有一个执行X次以具有更显着时差的函数。

http://jsfiddle.net/eTbsv/(你需要打开你的控制台&它需要几秒钟才能执行)

这是代码:

var doit = 10000000,
    i = 0,
    i2 = 0;

//testing var with comma
console.time('timer');      
function test(){
    var a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z;
};
while (i<=doit){
   test();      
   i++;
};
console.timeEnd('timer');

//testing individual var declarations 
console.time('timer2');
function test2(){
     var a; var b; var c; var d; var e; var f; var g; var h; var i; var j; var k; var l; var m; var n; var o; var p; var q; var r; var s; var t; var u; var v; var w; var x; var y; var z;
 };
 while (i2<=doit){
     test();
     i2++;
 };
 console.timeEnd('timer2');

现在我有两个问题:

  1. 这是测试变量声明速度的准确方法吗?
  2. 如何在没有firefox崩溃的情况下测试更多周期?例如,如果我将doit设置为1000000000,则firefox希望停止脚本。
  3. 为什么我的结果(我的脚本和jspref)每次都如此不同?有时,单个变量声明比分组更快:/
  4. 编辑刚刚制作了JS Pref testcase:http://jsperf.com/testing-js-variable-declaration-speed如果你们中有些人拥有不同的浏览器和配置就可以参加。但我仍然有兴趣知道这种测试方法是否准确。

2 个答案:

答案 0 :(得分:2)

  

这是测试变量声明速度的准确方法吗?

获得一个粗略的想法已经足够了,但它并不完美。像大多数事情一样,它依赖于CPU。如果由于其他应用程序(例如病毒扫描程序)或浏览器中的其他操作(例如网络钓鱼检查)导致测试期间CPU出现峰值,则可能会降低JavaScript执行速度。即使CPU空闲,也不是一个精确的科学,你必须多次运行才能获得良好的平均值。

  

如何在没有firefox崩溃的情况下测试更多周期?例如,如果我将doit设置为1000000000,则firefox希望停止脚本。

Firefox将JavaScript执行限制为最多10秒。我不确定是否有解决方法。

  

为什么我的结果(我的脚本和jspref)每次都如此不同?有时,单个变量声明比分组更快:/

因为这两者之间可能没有真正的区别。所有变量声明都是“提升”的,并且很可能这是在解析时而不是作为优化的运行时完成的,因此在解析它们之后函数的内部表示将是相同的。唯一的区别是影响初始化未定义变量和执行其他空函数所花费时间的微妙因素。

答案 1 :(得分:0)

关于2中断用户输入的循环是我能想到的唯一方法来轻松停止无响应的脚本对话框。

因此每n次迭代显示一次警报(显然在此期间停止计时器)。

您是否考虑过在spidermonkey等中执行此操作,或者您对浏览器实现特别感兴趣?