【问题标题】:How do I compare the speed of two Javascript functions?如何比较两个 Javascript 函数的速度?
【发布时间】:2023-03-03 03:11:01
【问题描述】:

我有一些 Javascript 正在读取一些 XML。有一个旧函数用于从该数据创建 JSON 对象,我编写了一个新函数,希望能更快地创建该 JSON 对象。 确定哪个功能执行得更快的最简单和最好的方法是什么?这是相当数量的数据,因此了解这一点很重要。 谢谢。

【问题讨论】:

  • 我不会声称知道最好的方法,但有些人喜欢jsperf.com

标签: javascript jquery performance


【解决方案1】:
(new Date).getTime();

这是您获取当前时间的方式(以毫秒为单位)。在执行代码之前和之后执行此操作,减去,执行时间以毫秒为单位。

示例:

var start=(new Date).getTime();
//call your code
alert('Code took '+((new Date).getTime()-start)+'ms');

如果您的代码组织允许,您可以在 for 循环中进行调用,重复 n(比如 1000)次,最后将时间除以 n。

这样您可以获得平均速度,如果您的功能变化很大(例如网络调用),这尤其有用。

【讨论】:

  • ... 然后在每个版本上执行一千次并取最小值作为结果。
  • 谢谢,伯吉!这是一个很好的建议,如果在 OP 的情况下可以这样做的话。编辑答案。
【解决方案2】:

这是在浏览器还是服务器端?

如果是服务器端,我建议使用您选择的 shell 脚本工具进行基准测试(linux 有 time,windows 有......无论 windows 有什么)。

如果它在浏览器中,那么您始终可以将一定数量的迭代(通常 10,000 次就足够了)包装在:

var start = new Date.getTime();

var runs = 10000;

while (runs) {
    // do stuff here

    runs--;
}

console.log('Finished in ' + (new Date.getTime() - start) + ' ms.');

【讨论】:

    【解决方案3】:

    您可以使用console.time("ID");console.timeEnd("ID");(信息here),然后在Chrome 开发者工具或Firebug 中查看结果,如下所示:

    console.time("oldFunc");
    //oldfunc();
    console.timeEnd("oldFunc");
    
    console.time("newfunc");
    //newfunc();
    console.timeEnd("newfunc");
    

    另外,你可以使用jsperf

    【讨论】:

      【解决方案4】:
       var d1 = new Date();     
       function1();
       var d2 = new Date();
       console.log("Function 1 : ", d2.getTime() - d1.getTime());
      
       function2();
       var d3 = new Date();
       console.log("Function 2 : ", d3.getTime() - d2.getTime());
      

      【讨论】:

        【解决方案5】:

        我喜欢John Resigs way 测试一个函数的性能:

        function runTest(name, test, next){
          var runs = [], r = 0;
          setTimeout(function(){
            var start = Date.now(), diff = 0;
        
            for ( var n = 0; diff < 1000; n++ ) {
              test();
              diff = Date.now() - start;
            }
        
            runs.push( n );
        
            if ( r++ < 4 )
              setTimeout( arguments.callee, 0 );
            else {
              done(name, runs);
              if ( next )
                setTimeout( next, 0 );
            }
          }, 0);
        }
        

        【讨论】:

          【解决方案6】:

          这里的一些信息和代码示例

          http://www.einternals.com/blog/web-development/javascript-find-script-execution-time-2

          var startDate = new Date(); 
          
          // execute your tasks here
          
          var endDate = new Date();
          
          var timeTaken = endDate.getTime() - startDate.getTime();
          
          alert('Time take to execute the script is '+timeTaken+' milliseconds');
          

          【讨论】:

            猜你喜欢
            • 2018-06-12
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2016-04-26
            • 1970-01-01
            • 1970-01-01
            • 2018-01-26
            • 1970-01-01
            相关资源
            最近更新 更多