2012-10-22 103 views
1

我正在研究Web浏览器中JavaScript解析器的速度,重要的是它需要很容易演示。我想出了一个简单的测试 - 的想法是,每个脚本块进行解析,并单独执行,所以脚本块大可定时:JavaScript浏览器解析速度测试

<script>var start = new Date().getTime();</script> 

<script> 
    /*! jQuery v1.8.2 jquery.com | jquery.org/license */ 
    ... 
</script> 

<script>alert (new Date().getTime() - start);</script> 

从表面上看,这似乎工作,消除中间脚本块导致时间可以忽略不计。

但我不确定我的逻辑没有根本的缺陷。

+0

另外,您可能会发现浏览提交给JSPerf的一些性能测试所采用的策略很有趣:http://jsperf.com/browse – rjz

+1

您会对此有一个定时的想法,但不要不要忘记缓存对加载和解析时间的影响。如果浏览器之前看过脚本,它可能会缓存已编译的代码。另外,你不是第一个对分析速度感到好奇的人。 http://carlos.bueno.org/2010/02/measuring-javascript-parse-and-load.html –

+0

我经常使用JSPerf,但我还没有想到在那里适当实现这一点的方法。你指出这是一个很好的资源是正确的。 @MikeMcCaughan如果只是在文档上刷新它会产生巨大的差异,我很快就会指出,这只能在禁用缓存或新环境下完成。 –

回答

0

这可能有帮助!

var start = new Date().getTime(); 
var end = new Date().getTime(); 
var time = end - start; 
alert('Execution time: ' + time); 
+1

这是什么不同我已经在做? –

0

如果你想基准你的JavaScript,包括毫秒等

var t = new Date(); 
var start = t.getTime()*1000 + t.getMilliseconds(); 

/* do something*/ 

var t2 = new Date(); 
var end = t2.getTime()*1000 + t.getMilliseconds(); 

alert("The Code needed " + (end-start) + " milliseconds. That are " + parseInt((end-start)/1000) + " seconds."); 
+0

我不知道这与我已经做了什么不同,getTime()方法已经返回毫秒。但是,谢谢你指出getMilliseconds()方法,它可能很有用。 –

+0

我很抱歉,当时在PHP .. – tobspr

0

您可能要分析和执行时间之间进行区分。你可以这样做

<script>start = Date.now();</script> 
<script> 
    parsed = Date.now(); 
    /*! jQuery v1.8.2 jquery.com | jquery.org/license */ 
    … 
</script> 
<script>var end = Date.now(); 
    alert ("parsed in " + (parsed - start) + "ms"); 
    alert ("executed in " + (end - parsed) + "ms"); 
    alert ("overall time: " + (end - start) + "ms"); 
</script> 

与您可能能够检测缓存解析树等等。但是,对于更多不同的信息,看看你的开发工具,它们显示在他们的探查节这样类型的信息。或者在Opera中,它包含在网络面板中脚本的加载过程中。