2016-04-25 8 views
2
function reverseArray(array) { 
    var output = []; 
    for (var i = array.length - 1; i >= 0; i--) 
    output.push(array[i]); 
    return output; 
} 

function reverseArrayInPlace(array) { 
    for (var i = 0; i < Math.floor(array.length/2); i++) { 
    var old = array[i]; 
    array[i] = array[array.length - 1 - i]; 
    array[array.length - 1 - i] = old; 
    } 
    return array; 
} 

私はchromeブラウザでperformance.now()を試しましたが、毎回異なる結果が得られました。また、performance.now()はコードのパフォーマンスをチェックする良い方法ですか?次の機能のうちパフォーマンスが良いのは誰ですか?

+2

[jsperf](http://jsperf.com)のジョブのように見えます – Pointy

+1

@Pointy jsperfは利用できません。 –

+0

ああそれは私が推測するかなり大きな問題になるだろう:) – Pointy

答えて

3

2番目の機能は高速です。

ループが何回「ループ」する必要があるか考えてください。2番目の関数でループを半分にカットすると、パフォーマンスが向上するはずです。最初の関数では配列全体をループします。

私たちがここで話していることはSOのすばらしい答えがあるその時の複雑さ、特にこの1である:あなたがループアンロールと呼ばれるものaplyingされている第二の機能でHow to find time complexity of an algorithm

+0

performance.now()が同じマシン上の同じブラウザで異なる出力を出す理由を答えることができますか? –

+0

違いは何ですか? jsperfを使用してください。そのバックアップが当然の場合 – JordanHendrix

+0

第1の機能の場合は0.1250ミリ秒、第2の機能の場合は0.2950ミリ秒です。もう1つの結果:1番目の機能で0.1850ミリ秒、2番目の機能で0.1200ミリ秒。 –

0

。パフォーマンスを向上させるための既知の方法です(ループ中に、セグメント化されたパイプラインにロードされた命令は、ループが繰り返しを完了するとドロップされ、再度ロードする必要があります)。

しかし、これは

あなたができる最善のは、自分でそれベンチマークです(Is GCC loop unrolling flag really effective?この記事を参照してください)常に真ではありません。

+0

performance.now()が同じマシン上で異なる出力を出す理由は何ですか? –

+0

@kamalkokne Google chromeには、パフォーマンス測定ツールが組み込まれています。その代わりにhttps://developer.chrome.com/devtools/docs/cpu-profilingを使用することをお勧めします – Nadir

関連する問題