Циклы ЦП, использование памяти, время выполнения и т. Д.?
Добавлено: Есть ли количественный способ тестирования производительности в JavaScript, кроме простого восприятия скорости выполнения кода?
javascript
performance
danmine
источник
источник
Ответы:
Профилировщики, безусловно, являются хорошим способом получения цифр, но по моему опыту воспринимаемая производительность - это все, что имеет значение для пользователя / клиента. Например, у нас был проект с Ext аккордеоном, который расширился, чтобы показать некоторые данные, а затем несколько вложенных сеток Ext. На самом деле все рендерилось довольно быстро, ни одна операция не заняла много времени, было просто много информации, отображаемой одновременно, поэтому пользователю это казалось медленным.
Мы «исправили» это, не переключаясь на более быстрый компонент или оптимизируя какой-либо метод, но сначала отображая данные, а затем отображая сетки с помощью setTimeout. Итак, сначала появилась информация, затем через секунду появятся сетки. В целом, для этого потребовалось немного больше времени на обработку, но для пользователя воспринимаемая производительность была улучшена.
В эти дни, профайлер Chrome и другие инструменты повсеместно доступны и просты в использовании, так же как
console.time()
,console.profile()
иperformance.now()
. Chrome также дает вам представление временной шкалы, которое может показать вам, что убивает вашу частоту кадров, где пользователь может ждать и т. Д.Найти документацию по всем этим инструментам очень просто, для этого вам не нужен SO-ответ. Спустя 7 лет я все же повторю совет моего первоначального ответа и укажу, что вы можете иметь медленный код, выполняемый вечно, где пользователь этого не заметит, и довольно быстрый код, работающий там, где он это делает, и они будут жаловаться на довольно быстрый код недостаточно быстр. Или чтобы ваш запрос к API вашего сервера занял 220мс. Или что-то подобное. Суть в том, что если вы возьмете профилировщик и начнете искать работу, вы найдете ее, но это может быть не та работа, которая нужна вашим пользователям.
источник
Я согласен, что воспринимаемая производительность - это действительно все, что имеет значение. Но иногда я просто хочу выяснить, какой способ сделать что-то быстрее. Иногда разница огромна и стоит знать.
Вы можете просто использовать таймеры JavaScript. Но я , как правило , получить гораздо более стабильные результаты , используя родную Chrome ( в настоящее время также в Firefox и Safari) методу devTool
console.time()
&console.timeEnd()
Пример того, как я использую это:
Обновление (4/4/2016):
Chrome canary недавно добавил Line Level Profiling на вкладку источников инструментов dev, которая позволяет точно узнать, сколько времени потребовалось для выполнения каждой строки!
источник
Мы всегда можем измерить время, затраченное любой функцией, на простой объект даты .
источник
performance.now()
Попробуйте jsPerf . Это онлайн-инструмент для работы с JavaScript для сравнения и сравнения фрагментов кода. Я использую это все время.
источник
%timeit
вipython
REPL оболочки для кода Python.Большинство браузеров теперь поддерживают синхронизацию с высоким разрешением
performance.now()
. Он лучшеnew Date()
для тестирования производительности, потому что он работает независимо от системных часов.использование
Ссылки
источник
performance.now()
.JSLitmus - это легкий инструмент для создания специальных тестов JavaScript.
Давайте рассмотрим производительность между
function expression
иfunction constructor
:То, что я сделал выше, это создание
function expression
иfunction constructor
выполнение той же операции. Результат выглядит следующим образом:Результат исполнения FireFox
IE Performance Результат
источник
Некоторые люди предлагают конкретные плагины и / или браузеры. Я бы не стал, потому что они действительно полезны только для этой платформы; тестовый запуск в Firefox не будет точно соответствовать IE7. Учитывая, что 99,999999% сайтов посещают более одного браузера, необходимо проверить производительность на всех популярных платформах.
Мое предложение было бы сохранить это в JS. Создайте страницу сравнения со всеми вашими тестами JS и временем выполнения. Вы могли бы даже иметь это AJAX - отправлять результаты обратно вам, чтобы сохранить его полностью автоматизированным.
Затем просто промойте и повторите на разных платформах.
источник
У меня есть небольшой инструмент, с помощью которого я могу быстро запустить небольшие тесты в браузере и сразу же получить результаты:
Тест скорости JavaScript
Вы можете поиграть с кодом и узнать, какая техника лучше в проверенном браузере.
источник
Я думаю, что тестирование производительности JavaScript (времени) вполне достаточно. Я нашел очень удобную статью о тестировании производительности JavaScript здесь .
источник
Вот простая функция, которая отображает время выполнения переданной функции:
источник
Вы можете использовать это: http://getfirebug.com/js.html . У него есть профилировщик для JavaScript.
источник
Быстрый ответ
В jQuery (точнее, в Sizzle) мы используем это (мастер проверки и откройте speed / index.html в вашем браузере), который, в свою очередь, использует benchmark.js . Это используется для проверки производительности библиотеки.
Длинный ответ
Если читатель не знает разницы между эталонным тестом, рабочей нагрузкой и профилировщиками, сначала прочтите некоторые основы тестирования производительности в разделе «readme 1st» spec.org . Это для тестирования системы, но понимание этой основы также поможет JS-тестированию. Некоторые основные моменты:
Тестирование производительности JS
В идеале, лучшим тестом производительности будет использование собственного приложения с переключением рабочей нагрузки на то, что нужно тестировать: разные библиотеки, машины и т. Д.
Если это невозможно (и обычно это не так). Первый важный шаг: определите свою рабочую нагрузку. Он должен отражать нагрузку на ваше приложение. В этом выступлении Вячеслав Егоров рассказывает о дерьмовых нагрузках, которых следует избегать.
Затем вы можете использовать такие инструменты, как benchmark.js, чтобы помочь вам собирать метрики, обычно скорость или пропускную способность. На Sizzle нам интересно сравнить, как исправления или изменения влияют на системную производительность библиотеки.
Если что-то работает очень плохо, ваш следующий шаг - поиск узких мест.
Как мне найти узкие места? Профайлеры
Каков наилучший способ профилировать выполнение JavaScript?
источник
Я считаю, что время выполнения - лучшая мера.
источник
Вы можете использовать console.profile в firebug
источник
Я обычно просто тестирую производительность javascript, как долго работает скрипт. jQuery Lover дал хорошую ссылку на статью для тестирования производительности кода javascript , но статья показывает только, как проверить, как долго работает ваш код javascript. Я также рекомендовал бы прочитать статью под названием «5 советов по улучшению кода JQuery при работе с огромными наборами данных».
источник
Вот класс многократного использования для времени выполнения. Пример включен в код:
источник
UX Profiler подходит к этой проблеме с точки зрения пользователя. Он группирует все события браузера, сетевую активность и т. Д., Вызванные некоторыми действиями пользователя (щелчок), и учитывает все аспекты, такие как задержка, время ожидания и т. Д.
источник
Я искал что-то похожее, но нашел это.
https://jsbench.me/
Это позволяет проводить параллельное сравнение, а затем вы также можете поделиться результатами.
источник
Золотое правило - НЕ при любых обстоятельствах блокировать браузер пользователя. После этого я обычно смотрю на время выполнения, а затем на использование памяти (если вы не делаете что-то сумасшедшее, в этом случае это может быть более высокий приоритет).
источник
В последнее время тестирование производительности стало чем-то вроде модного слова, но это не значит, что тестирование производительности не является важным процессом в QA или даже после поставки продукта. И пока я разрабатываю приложение, я использую много разных инструментов, некоторые из них, упомянутые выше, например, Chrome Profiler, я обычно смотрю на SaaS или что-то с открытым исходным кодом, которое я могу запустить и забыть об этом, пока не получу предупреждение о том, что что-то пошло не так. ,
Есть много замечательных инструментов, которые помогут вам следить за производительностью, не заставляя вас прыгать через обручи, просто чтобы настроить некоторые базовые оповещения. Вот некоторые, которые, я думаю, стоит проверить сами.
Чтобы попытаться нарисовать более четкую картину, вот небольшое руководство о том, как настроить мониторинг для реагирующего приложения.
источник
Это хороший способ сбора информации о производительности для конкретной операции.
источник