Как профилировать и получить производительность Javascript
Возможный дубликат:
Каков наилучший способ профилировать выполнение JavaScript?
У меня есть несколько сценариев, использующих jQuery, и я думаю, что у меня утечка памяти в одном из них.
Как можно профилировать и найти, какие части скриптов, которые у меня есть, используют больше всего памяти/процессора?
Ответы
Ответ 1
Что касается потребления памяти
Утечки памяти в JavaScript обычно игнорируются, за исключением случаев, когда они переходят в утечку памяти браузера (то есть даже после того, как пользователь переходит от страницы, память продолжает выделяться, и нет возможности ее освободить). Причина этого в том, что, хотя ваше веб-приложение может иметь некоторые утечки памяти, пользователи перейдут с одной страницы на другую, чтобы утечки были сведены к минимуму. Однако они не могут перезапустить браузер, поэтому утечки памяти браузера могут быть серьезными. Известно, что некоторые JavaScript-коды вызывают утечку памяти в определенных браузерах, поскольку Internet Explorer, вероятно, является наихудшим в этой области. Для этого вы можете найти Microsoft JavaScript Memory Leak Detector, чтобы быть очень полезным.
Что касается времени
IE, Chrome и Safari встроены в профилографы в средствах веб-разработки, которые поставляются с браузером. Для Firefox вы можете использовать Firebug. Также полезно, поскольку вы используете jQuery, что означает, что ваш отчет о профилировании будет заполнен анонимными функциями и аналогичным, делая его совершенно нечитаемым, Плагин профилирования jQuery Джона Резига, что даст вам более четкое представление по этому вопросу.
Ответ 2
Используйте Firebug. Цитировать из http://getfirebug.com/js.html:
Чтобы использовать профилировщик, перейдите на вкладку "Консоль" и нажмите кнопку "Профиль". Затем используйте приложение для загрузки или перезагрузите страницу, а затем снова нажмите кнопку "Профиль". Затем вы увидите подробный отчет, который показывает, какие функции были вызваны, и сколько времени прошло каждый.
Ответ 3
Я бы предложил взглянуть на профилировщика в Firebug, а Drip для IE, чтобы помочь найти утечки памяти.
Кроме того, имейте в виду, что большинство утечек памяти javascript происходят из круговых ссылок между объектами DOM и объектами javascript, которые не разбиваются при выгрузке объекта DOM. Чтобы этого избежать, я предлагаю избегать создания ссылок на объекты javascript в свойствах объекта DOM (т.е. Избегать чего-то вроде document.getElementById('foo').bar = myObject;
). Если вы должны создать эти циклические ссылки, обязательно разблокируйте их самостоятельно в функции, которая запускается при выгрузке страницы или при удалении объектов DOM до выгрузки.
Ответ 4
В Google Chrome также есть параметры профиля
Ответ 5
Еще один простой способ протестировать конкретный фрагмент кода - добавить к нему таймер.
var testStart = new Date();
// code to be tested here
$('#jstest').html("selected function: "+ (new Date() - testStart) + " milliseconds");
Где jstest - элемент span, который отображается на вашей странице.
Ответ 6
Хотя хром имеет встроенные параметры профилирования, он не дает точной информации об объекте. Поэтому я предпочитаю использовать инструмент поиска утечек для javascript, который помог мне в моем коде.
https://code.google.com/p/leak-finder-for-javascript/
Надеюсь, это поможет.
Ответ 7
Firebug или Google Page Speed для Firefox имеют инструменты профилирования.
Ответ 8
Это сообщение Джона Ресига (jQuery) может быть полезно для обнаружения утечек памяти в IE:
http://ejohn.org/blog/deep-tracing-of-internet-explorer/