Подтвердить что ты не робот

Медленное выполнение javascript в хроме, выход профилировщика "(программа)"

Как я могу определить, какие зависания находятся в моем приложении javascript, когда профайлер ставит (программу) вверху на 80%? Является ли моя логика слишком сложной для отслеживания хот-спота? Является ли слишком большой объем памяти? Что вообще является причиной этого?

Дополнительная информация:

  • В форме нет элементов, кроме одного тега canvas
  • Нет ожидающих сообщений (xhr)
  • http://i.imgur.com/j6mu1.png Profile data
4b9b3361

Ответ 1

Циклы бездействия ( "ничего не делают" ) также будут отображаться как "(программа)" (вы можете профилировать эту страницу SO в течение нескольких секунд и получить 100% от (программы)), так что это не является признаком чего-то плохого само по себе.

Другое дело, когда вы действительно видите, что ваше приложение отстает. Затем (program) будет внесен код привязки V8 (и код WebCore, который они вызывают, что по существу: операции DOM/CSS, рисование, выделения памяти и GC, что нет.) Если это в этом случае вы можете записать Временную шкалу вашего приложения (переключитесь на панель Timeline в Инструментах разработчика и нажмите кнопку Record в нижней строке состояния, а затем запустите приложение на некоторое время.) Вы увидите много внутренних событий со своими таймингами в виде горизонтальных баров. Вы увидите пересчеты, пересчеты стиля, запуск таймеров, события GC и т.д. (Кстати, последние версии Chromium имеют улучшенную временную шкалу использования профилей памяти, поэтому вы также сможете контролировать память, используемую некоторыми внутренними факторами.)

Чтобы диагностировать проблемы памяти (множественные распределения, связанные с несколькими циклами полного GC), вы можете использовать панель Profiles. Возьмите снимок кучи, прежде чем начнется интенсивная часть вашего кода, а другая - после того, как этот код запустится некоторое время. Затем сравните два кучи (правый SELECT внизу), чтобы увидеть, какие распределения произошли, и их влияние на память.

Ответ 2

Чтобы проверить, работает ли медленное из-за использования памяти, используйте: chrome://memory

Также вы можете проверить chrome://profiler/ на предмет возможных подсказок о том, что происходит.

Другой вариант - разместить здесь свой код javascript.

Ответ 3

См. эту ссылку: это поможет вам в Понимание профайлера Firebug

Я бы сказал, что вы должны проверить, какие методы принимают%. Вы можете свести к минимуму нежелательные процедуры. Я видел в вашей фигуре, если какой-то метод draw потребляет около 14%, который работает в фоновом режиме. Возможно, из-за этого ваша JS-загрузка медленно. Вы должны определить, что займет время. У FF и Chrome есть функция, показывающая сетевой трафик. Посмотрите yslow, у них есть отличный аддон Firebug.

Я бы предложил некоторые инструменты аудита Chome, которые могут рассказать вам много о том, почему это происходит, вероятно, вы должны включить дополнительную информацию о:

  • сколько времени потребовалось для подключения к серверу?
  • сколько времени потребовалось для передачи контента?
  • сколько других вещей вы загружаете на эту страницу одновременно?

в любом случае даже без этого, вот контрольный список для повышения производительности для вас:

  • убедитесь, что ваш javascript обрабатывается и служит статическим контентом, например. через nginx/apache/безотносительно напрямую или cdn, не попадая в рамки вашего приложения.
  • исследуйте, можете ли вы использовать CDN для обслуживания javascript, иногда даже указывая на другие серверы разные имена доменов, оказывает положительное влияние, например. вместо http://example.com/blah.jshttp://cdn2.example.com/blah.js
  • убедитесь, что ваш js обслуживается с соответствующими заголовками истечения срока действия, не перегружайте его каждый раз, когда клиент обновляет страницу
  • включить gzipping содержимого js
  • минимизировать ваши js с помощью различных доступных инструментов (например, с помощью компилятора Google закрытия).
  • объединить ваши скрипты (уменьшает количество запросов)
  • поставьте теги script непосредственно перед
  • исследовать и очищать/оптимизировать ваши загрузочные и document.ready-крючки

Посмотрите плагин YSlow и Google PageSpeed ​​, что очень полезно для повышения производительности.