Javascript анализ времени выполнения - PullRequest
1 голос
/ 01 декабря 2009

Я написал файл Javascript, используя jQuery, для которого я хотел бы выполнить тесты во время выполнения. Я никогда не делал этого раньше, и мне было просто интересно, как это сделать. Один сайт, который я посетил, предложил это в качестве измерения:

var start = (new Date).getTime();
/* Run a test. */
var diff = (new Date).getTime() - start;

Это имеет смысл, прямо сейчас мой скрипт работает на веб-странице, все, что он делает, это сортирует кликнувшие столбцы в таблице. Что мне интересно знать, помимо фактического времени, так это как интерпретировать время в нотации Big-O. Кроме того, это самый стандартный метод измерения времени выполнения скрипта? Ваши мысли ценятся.

UPDATE: Спасибо, ребята, за ваш вклад, установил Firebug и играю с профилировщиком. Я попытаюсь выяснить, смогу ли я придумать аппроксимацию, чтобы проверить синхронизацию для обозначения Big-O.

Ответы [ 6 ]

3 голосов
/ 01 декабря 2009

Установите firefox с firebug , затем добавьте console.time('anyTimerYouWant');, чтобы запустить таймер, и console.timeEnd('anyTimerYouWant');, чтобы завершить его.

Насколько я знаю, нотация BigO не может быть легко рассчитана программно.

1 голос
/ 01 декабря 2009

Что касается интерпретации моментов времени "в нотации Big-O", то вам нужно сделать серию временных интервалов для входных данных разного размера, а затем найти корреляцию между результирующим временем и некоторым приближением. Если аппроксимация, которая подходит лучше всего, является линейной, то, вероятно, она равна O(n), если она логарифмическая, O(log(n)), если это полином 2-го порядка, O(n^2), и так далее.

1 голос
/ 01 декабря 2009

Инструмент Firefox Firebug можно использовать для профилирования JavaScript и времени выполнения функций. Вы можете узнать больше на http://getfirebug.com/js.html

0 голосов
/ 31 декабря 2011

Я не уверен, какова цель вашего кода, но я бы не стал выводить большой анализ понятия из фактической синхронизации кода.Вся идея понятия «большой О» - это асимптотическое число шагов как множитель n, ваш вклад.Алгоритмы сортировки больше или равны O (n * log (n)), поэтому это не может быть O (n).Кстати, когда числа недостаточно велики, очень сложно отличить O (n) от O (n * log (n)).

0 голосов
/ 05 декабря 2009

Можете ли вы попробовать это ? Это метод, который не измеряет, он просто говорит, что стоит больше всего времени, а также дает хорошее представление о том, что происходит со временем.

0 голосов
/ 01 декабря 2009

Я считаю, что получение начального и конечного времени является наиболее стандартным способом измерения времени выполнения скрипта. Вообще говоря, вы можете вычислить большую цифру O, не используя таймер, а просто взглянув на свой код. Имейте в виду, однако, что в JavaScript самыми большими узкими местами может быть не сам код, а время, которое требуется браузеру для обновления страницы (если, например, вы постоянно меняете DOM в своем алгоритме сортировки). Быстрее вносить изменения в DOM, а не понемногу.

...