• 一种简单的代码性能测试方法


    通常我们在做代码性能测试时,会在开始时获取一个时间戳,然后执行要测试的代码,在结束时再获取一个时间戳,然后两个时间戳相减得出代码执行消耗的时间。这种方法理论上可行,但结果并不总是准确的,特别是被执行的代码只有几毫秒执行时间的情况下。系统上运行的其他进程可能会导致结果偏差。更好的方法是让被测试的代码在单位时间(如1秒)内循环运行,然后统计单位时间内完成的循环次数来评价代码性能,可以重复测试来获取均值或中值。这些测试会运行相同的时间,更优的代码会完成更多的循环。

    常见的单次执行式的测试方法:

    var startTime = new Date().getTime();
    
    //在这里执行代码
    
    runtest();
    
    var timeElapsed = new Date().getTime() - startTime; //执行代码消耗的时间
    

    单位时间循环执行式的测试方法:

    var startTime = new Date().getTime(), count, timeElapsed;
    
    for(count = 0, timeElapsed = 0; timeElapsed < 1000; count++){
    
      //在这里执行代码
    
      test();
    
      timeElapsed = new Date().getTime() - startTime;
    
    }
    
    //最终count为循环执行的次数
    

    比如测试 Math.random()*255>>0 和  parseInt(Math.random()*255),这两个都是对数值取整,通常在设置随机颜色(rgb(255,255,255))时会用到,“>>”是算术位右移,可以去掉小数部分。

    编写如下测试代码:

    <!DOCTYPE HTML>
    <html>
    <head>
    <style type="text/css">
    
    </style>
    <script type="text/javascript">
    function runtest(func){
      var startTime = new Date().getTime(), count, timeElapsed;
      for(count = 0, timeElapsed = 0; timeElapsed < 1000; count++){
        func();
        timeElapsed = new Date().getTime() - startTime;
      }
      addResult();
      function addResult(){
        var li = document.createElement('li');
        li.innerHTML = count;
        document.getElementById('test_result').appendChild(li);
      }
    }
    /* your test code here */
    function test1(){
      var num = Math.random()*255>>0;
    }
    function test2(){
      var num = parseInt(Math.random()*255);
    }
    </script>
    </head>
    <body>
      <button onclick="runtest(test1)">run test1</button>
      <button onclick="runtest(test2)">run test2</button>
      <ol id="test_result">
      </ol>
    </body>
    </html>

    分别测试5次的结果:

    测试Math.random()*255>>0 的结果

    4359444
    4339976
    4324491
    4218870
    4339112

    测试parseInt(Math.random()*255)的结果

    3619779
    3713368
    3639922
    3629729
    3661628

    可以看出第一种方法比第二种更快,在大数据量处理情况下,选择第一种更好。

  • 相关阅读:
    sqlite3 多线程和锁 ,优化插入速度及性能优化
    Android Touch事件传递机制通俗讲解
    26. Remove Duplicates from Sorted Array----Array----Easy----20160927
    88. Merge Sorted Array----Array----Easy----20160926
    @121. Best Time to Buy and Sell Stock----Array----Easy---20160926
    88. Merge Sorted Array----Array----Easy----20160925
    189. Rotate Array----Array----Easy----20160925
    169. Majority Element----Array----Easy----20160925
    219. Contains Duplicate II 超时
    c++Map容器 详解
  • 原文地址:https://www.cnblogs.com/linerz/p/3295791.html
Copyright © 2020-2023  润新知