3

私は JavaScript の演習を行っており、演習に対するソリューション (アルゴリズム) を改善する方法を考えています。コードを微調整して実行速度を計算しようと考えているので、どれだけ速度が向上するかがわかります。この方法を検索して見つけたので、同じことができると思います。これが私がしたことです、

var d = new Date();
var startTime = d.getTime();
var endTime;

function testTargeAlgorithm(){
  ....
  ....
}

testTargetAlgorithm();

endTime = d.getTime();
console.log(endTime-startTime);

これは非常に単純なアルゴリズムなので、時間の間に顕著な違いがあるとは思わない. しかし、ミリ秒単位で速度の向上を測定できない場合、他に何ができるでしょうか?

4

3 に答える 3

4

performance.now()エンジンがサポートしている場合に使用できます。これにより、ページが読み込まれるかアプリが起動してから、ミリ秒単位の時間がミリ秒未満の精度で表示されます。

performance.now() // 26742.766999999956

Chromeがそれをサポートしていることは知っていますが、他のブラウザ、node.js、または他のエンジンのスタンドアロンjsエンジンについてはよくわかりません。


または、コードをループ内で何度も実行し、かかった合計時間を測定することもできます。

于 2013-02-20T16:43:39.393 に答える
2

同じ関数を何度も実行します。

var startTime = (new Date()).getTime();
for(var i=0;i<1000;i++) {
    testTargeAlgorithm()
}
var endTime = (new Date()).getTime();
console.log(endTime-startTime);

提案を反映するように編集されました、マルセルに感謝します

于 2013-02-20T16:41:48.387 に答える
1

process.hrtime()最終的に、実行時のパフォーマンスを測定するためにナノ秒の精度を提供するために使用しました。このメソッドは Node.js でのみ機能することに注意してください。Chrome と Firefox では、 を使用できますperformance.now()

同じアルゴリズム/関数を実行しても、おそらく CPU 使用率やその他の未知の影響により、返される時間差は依然として (ナノ秒単位で) 変動するため、十分な回数実行して平均を計算することをお勧めします。例えば:

function calAvgSpeed(timesToRun, targetAlgorithm){

var diffSum = 0;
for(var i = 1; i <= timesToRun; i++){
    var startTime = process.hrtime();
    targetAlgorithm();
    var diff = process.hrtime(startTime);
    diffSum += diff[1];
   }
   return Math.floor(diffSum / times);
}
于 2013-02-26T15:13:52.487 に答える