Может быть, это то, что вы ищете:
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 задачи имеют соотношение между длиной ввода и временем, это может быть простым способом.Вы можете измерять производительность с любым интервалом и, конечно, получать число циклов в качестве возвращаемого значения, поэтому вы можете легко измерить, насколько потоки влияют на производительность друг друга, с помощью обратного вызова даже для каждого цикла.Вот пример, как я это назвал (здесь используются jQuery и Dom, но, как вы можете видеть, необязательно)
$(document).ready(function() {
var outputFkt = function(counter, since) {
$('body').append('<p>'+counter+', since '+since+'</p>');
};
threadTest(1000, outputFkt, 20);
});
Последнее предупреждение: Конечно, эта функция не может быть болееточнее, чем сам JS.Поскольку современные браузеры могут выполнять намного больше одного цикла за одну миллисекунду, будет отрезан небольшой хвост.
Обновление
Думая об этом ... на самом делеиспользование обратного вызова ouputFkt
для большего, чем просто вывод, может дать отличную информацию.Вы можете передать метод, который использует некоторые общие свойства, или вы можете использовать его для проверки большого использования памяти.