2012-02-17 11 views
3

いくつかのXMLで読んでいるJavascriptがあります。そのデータからJSONオブジェクトを作成するために使用された古い関数があり、JSONオブジェクトをより速く作成することを望む新しい関数を書いています。 どの機能が高速に実行されているかを判断する最も簡単で効果的な方法は何ですか?それはまともな量のデータなので、知ることはいくらか重要です。おかげさまで 2つのJavascript関数の速度を比較するにはどうすればよいですか?

+1

上のいくつかの情報私は最善の方法を知っていると主張しませんhttp://jsperf.com –

答えて

11

そのようなChromeデベロッパーツールやFirebugの中で:また

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

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

、あなたが使用することができjsperf

2
(new Date).getTime(); 

これは、現在の時間をミリ秒単位で取得する方法です。コードの実行前後でそれを行い、減算し、実行時間をミリ秒単位で指定します。

サンプル:あなたのコードの組織が許可されている場合

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

、あなたは時間と最後にnで時間を分割(の1000を言わせて)のnを繰り返し、ループのためにあなたの電話をかけることができます。

このように平均速度を得ることができます。これは、機能が大きく異なる(ネットワークコールなど)場合に特に役立ちます。

+2

...のような人々は、各バージョンごとに1000回実行し、最小値を結果として取得します。 – Bergi

+0

ありがとう、ベルギ!それはOPの場合に行うことが可能な場合、それは良いアドバイスです。編集された答え。 –

0

これはブラウザまたはサーバー側のですか?

サーバ側の場合は、ベンチマークを行うためにシェルスクリプトツールを使用することをお勧めします(linuxにはtimeがあります)。

それはブラウザでなら、あなたは常にで(10,000通常は十分である)の反復の一定数をラップすることができます:あなたはconsole.time("ID");console.timeEnd("ID");(情報here)を使用し、その結果を見ることができる

var start = new Date.getTime(); 

var runs = 10000; 

while (runs) { 
    // do stuff here 

    runs--; 
} 

console.log('Finished in ' + (new Date.getTime() - start) + ' ms.'); 
0
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()); 
1

私は、関数のパフォーマンスをテストする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); 
} 
関連する問題