多分これはあなたが探しているものです:
var threadTest = function(durationMs, outputFkt, outputInterval) {
var startDateTime = (new Date()).getTime();
counter = 0,
testDateTime = null,
since = 0,
lastSince = -1;
do {
testDateTime = (new Date()).getTime();
counter++;
since = testDateTime - startDateTime;
if(typeof outputFkt != 'undefined' && lastSince != since && testDateTime % outputInterval == 0) {
outputFkt(counter, since);
lastSince = since;
}
} while(durationMs > since);
if(typeof outputFkt != 'undefined') {
outputFkt(counter, since);
}
return counter;
}
このメソッドは、ループでチェックを繰り返すだけです
durationMS - duartion it should run in miliseconds
OPTIONAL:
outputFkt - a callback method, for logging purpose function(currentCount, milisecondsSinceStart)
outputInterval - intervall the output function will be called
実際の関数をテストしたくないので、NP-Hard Problems でさえ入力の長さと時間の比率があるので、これは簡単な方法であると考えました。任意の間隔でパフォーマンスを測定でき、もちろんループ回数を戻り値として受け取ることができるため、サイクル単位でもコールバックを使用して、スレッドが互いにパフォーマンスをどの程度干渉するかを簡単に測定できます。
例として、ここに私がそれをどのように呼んだかを示します(jQueryとDomの使用法はここにありますが、ご覧のとおりオプションです)
$(document).ready(function() {
var outputFkt = function(counter, since) {
$('body').append('<p>'+counter+', since '+since+'</p>');
};
threadTest(1000, outputFkt, 20);
});
最後の警告:もちろん、この関数は JS 自体よりも正確ではありません。最新のブラウザは 1 ミリ秒で 1 サイクルよりもはるかに多くの処理を実行できるため、少し切り詰められる部分があります。
アップデート
考えてみてください...実際にouputFkt
コールバックを出力以外にも使用すると、優れた洞察が得られる可能性があります。いくつかの共有プロパティを使用するメソッドを渡すか、それを使用して大量のメモリ使用量をテストできます。