JavaScript浏览器解析速度测试

JavaScript浏览器解析速度测试,javascript,performance,browser,pagespeed,Javascript,Performance,Browser,Pagespeed,我正在研究web浏览器中JavaScript解析器的速度,重要的是它需要易于演示。我提出了一个简单的测试——其想法是每个脚本块都被单独解析和执行,因此可以对一大块脚本进行计时: <script>var start = new Date().getTime();</script> <script> /*! jQuery v1.8.2 jquery.com | jquery.org/license */ ... </script>

我正在研究web浏览器中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>
var start=new Date().getTime();
/*! jQuery v1.8.2 jQuery.com | jQuery.org/license*/
...
警报(新日期().getTime()-start);
从表面上看,这似乎是可行的,删除中间的脚本块所需的时间可以忽略不计

然而,我不确定我的逻辑是否存在根本缺陷。

这可能会有所帮助

var start = new Date().getTime();
var end = new Date().getTime();
var time = end - start;
alert('Execution time: ' + time);
这可能有帮助

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

如果您想对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.");

如果您想对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.");

答案似乎大体上是肯定的,但为了得到合理的结果(像其他任何事情一样),应该多次运行测试以消除编译缓存和垃圾收集的影响。上述测试可以很容易地放入Parse-n-Load库中:


感谢您的帮助

看来答案大体上是肯定的,但是为了得到合理的结果(像其他任何事情一样),应该多次运行测试以消除编译缓存和垃圾收集的影响。上述测试可以很容易地放入Parse-n-Load库中:


感谢您的帮助

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

<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>
start=Date.now();
parsed=Date.now();
/*! jQuery v1.8.2 jQuery.com | jQuery.org/license*/
…
var end=Date.now();
警报(“在“+(已解析-开始)+”ms中解析”);
警报(“在“+(结束-解析)+”毫秒中执行”);
警报(“总时间:”+(结束-开始)+“毫秒”);

有了它,您可能能够检测缓存的解析树等。然而,要获得更多不同的信息,请查看您的开发人员工具,它们在其探查器部分中显示此类信息。或者在Opera中,它包含在网络面板中的脚本加载过程中。

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

<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>
start=Date.now();
parsed=Date.now();
/*! jQuery v1.8.2 jQuery.com | jQuery.org/license*/
…
var end=Date.now();
警报(“在“+(已解析-开始)+”ms中解析”);
警报(“在“+(结束-解析)+”毫秒中执行”);
警报(“总时间:”+(结束-开始)+“毫秒”);

有了它,您可能能够检测缓存的解析树等。然而,要获得更多不同的信息,请查看您的开发人员工具,它们在其探查器部分中显示此类信息。或者在Opera中,它包含在网络面板中的脚本加载过程中。

除此之外,您可能会发现浏览提交给JSPerf的一些性能测试所采用的策略很有趣:您将了解这方面的时间安排,但不要忘了缓存对加载和解析时间的影响。如果浏览器以前见过脚本,它可能会缓存编译后的代码。此外,您不是第一个对解析速度感到好奇的人。我经常使用JSPerf,但我还没有想到一种在那里适当地实现它的方法。你说得对,这是一个很好的资源@MikeMcCaughan如果只是在文档上点击“刷新”按钮,就会产生巨大的差异,我很快就警告说,这只能在禁用缓存或在新环境中完成。@I_like_robots;这里我指的是JavaScript引擎缓存代码的编译版本,而不是浏览器页面缓存。请参阅下面的答案以获得更好的概述:@MikeMcCaughan很有用,谢谢你,但你可能会发现浏览提交给JSPerf的一些性能测试所采用的策略很有趣:你会对这方面的计时有一个想法,但不要忘了缓存对加载和解析时间的影响。如果浏览器以前见过脚本,它可能会缓存编译后的代码。此外,您不是第一个对解析速度感到好奇的人。我经常使用JSPerf,但我还没有想到一种在那里适当地实现它的方法。你说得对,这是一个很好的资源@MikeMcCaughan如果只是在文档上点击“刷新”按钮,就会产生巨大的差异,我很快就警告说,这只能在禁用缓存或在新环境中完成。@I_like_robots;这里我指的是JavaScript引擎缓存代码的编译版本,而不是浏览器页面缓存。请参阅下面的答案以获得更好的概述:@MikeMcCaughan有用,谢谢。我不确定这与我正在做的有什么不同,getTime()方法已经返回毫秒。但是感谢您指出getMillimes()方法,它可能会很有用。我不确定这与我正在做的有什么不同,getTime()方法已经返回毫秒了。但是感谢您指出getMillimess()方法,它可能会很有用。