Есть ли пакет, который помогает мне тестировать код JavaScript? Я не имею в виду Firebug и подобные инструменты.
Мне нужно сравнить 2 разные функции JavaScript, которые я реализовал. Я очень хорошо знаком с модулем Perl Benchmark ( Benchmark.pm ) и ищу что-то подобное в JavaScript.
Неужели упор на тестирование кода JavaScript переборщил? Могу ли я обойтись без тайминга всего лишь одного запуска функций?
javascript
benchmarking
Ионный морж
источник
источник
Ответы:
Просто рассчитайте несколько итераций каждой функции. Одной итерации, вероятно, будет недостаточно, но (в зависимости от сложности ваших функций) где-то около 100 или даже 1000 итераций должны выполнить свою работу.Firebug также имеет профилировщик, если вы хотите увидеть, какие части вашей функции замедляют ее.Изменить: для будущих читателей приведенный ниже ответ, рекомендующий JSPerf, должен быть правильным ответом. Я бы удалил свой, но не могу, потому что он был выбран OP. Бенчмаркинг - это гораздо больше, чем просто выполнение множества итераций, и JSPerf позаботится об этом за вас.
источник
jsperf.com - это сайт для тестирования производительности JS. Начни там. Если вам нужен фреймворк для запуска ваших собственных тестов из командной строки или сценариев, используйте Benchmark.js , библиотеку, на которой построен jsperf.com.
Примечание. Любой, кто тестирует код Javascript, должен изучить подводные камни «микробенчмарков» (небольших тестов, нацеленных на конкретную функцию или операцию, а не более сложных тестов, основанных на реальных шаблонах кода). Такие тесты могут быть полезны, но они подвержены неточностям из-за того, как работают современные среды выполнения JS. Стоит посмотреть презентацию Вячеслава Егорова о производительности и тестировании , чтобы понять суть проблемы (-ов).
Изменить: удалены ссылки на мою работу JSLitmus, поскольку она больше не актуальна и не полезна.
источник
Просто добавьте в микс быстрый таймер, который может кому-то пригодиться:
В идеале он должен быть помещен в класс, а не использоваться как глобальный, как я сделал для примера выше. Использовать его было бы довольно просто:
источник
performance.now()
вместоDate()
developer.mozilla.org/en-US/docs/Web/API/Performance/nowПросто простой способ.
источник
Я использовал эту простую реализацию ответа @musicfreaks. Нет никаких функций, но им действительно легко пользоваться. Это
bench(function(){return 1/2;}, 10000, [], this)
будет вычислять 1/2 10000 раз.источник
Очень сложно написать достойные кросс-браузерные тесты. Простое определение времени заранее определенного количества итераций вашего кода вовсе не является пуленепробиваемым .
Как уже предлагал @broofa, попробуйте jsPerf . Он негласно использует Benchmark.js .
источник
при написании собственного тестового сценария обязательно обратите внимание, что некоторые браузеры применяют dom-манипуляции только после завершения функции, в которой они определены. Подробнее здесь http://www.quirksmode.org/blog/archives/2009/08/when_to_read_ou.html
источник
Если вам нужно что-то простое, вы можете сделать вот так:
Вот пример кода
источник