Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Профилирование JavaScript объектов в памяти (https://javascript.ru/forum/misc/8004-profilirovanie-javascript-obektov-v-pamyati.html)

prike 02.03.2010 17:36

Профилирование JavaScript объектов в памяти
 
Товарищи,

Поделитесь пожалуйста опытом профилирования клиентского JavaScript, у кого он есть.

Есть HTML страница которая в которую с помощью Ajax подгружаются данные. В случае если объем этих данных приличный FireFox и IE 8 повисают на определенное время. Если в подробностях есть два ajax колла, которые загружают 8 и 50 MB соответственно, в результате после загрузки этих данных и внедрения их в HTML разметку память занимаема FireFox возрастает с 200 MB до 1200 MB, IE 8 c 30 до 650 MB (цифры приблизительные). Соответственно стоит задача определить объекты JavaScript (а также DOM объекты) занимающие больше всего памяти, что бы сделать соответствующие выводы.

Прошу отвечать по теме, какие можно тулзы использовать, или как это лучше сделать, про FireBug просьба не писать, он позволяет получить время выполнения функций JavaScript, но, если не ошибаюсь, то что мне нужно он не позволяет сделать.

Kolyaj 02.03.2010 17:43

Для IE есть ещё dynaTrace.

В любом случае обрабатывать в браузере 50 МБ данных как-то слегка неправильно.

e1f 02.03.2010 17:43

http://www.mozilla.org/performance/tools.html
https://wiki.mozilla.org/Performance:Leak_Tools
http://www.whitefrost.com/documents/...ml/jsprof.html
http://blogs.msdn.com/ie/archive/200...-profiler.aspx

prike 12.03.2010 18:17

Kolyaj, e1f, спасибо за ссылки.

В итоге согласно первым двум ссылкам от e1f для Fire Fox есть возможности получить дамп памяти JavaScript и найти объекты оставшиеся в памяти после выгрузки страницы (т.е. утечки памяти), но это скорее для разработчиков плагинов или самого Fire Fox. Остальное, включая dynaTrace скорее повторяют функционал профилирования, доступный в FireBug, т.е. статистика времен вызова функций, статистика работы с сетью (загрузка объектов HTML, выполнения XMLHttpRequest и т.д.), хотя dynaTrace показывает это в более удобном виде и немного более шире чем FireBug.

К слову сказать для Internet Explorer утечки памяти актуальны только в версии 6, в 7 все объекты удаляются при выгрузке страницы, в 8-м заявлено что утечек нет. Для определения утечек памяти в IE есть специальная тулза от Microsoft: JavaScript Memory Leak Detector
Вот ссылки на эту тему:
http://blogs.msdn.com/gpde/pages/jav...tector_v2.aspx
http://blogs.msdn.com/gpde/pages/jav...-detector.aspx (если мне не изменяет память в этой статье должно объясняться откуда берутся утечки, но к сожалению в момент написания этого поста, сервер Microsoft был временно недоступен)

В итоге решить поставленную проблему - анализа памяти, точнее объектов JavaScript в памяти - помогла следующая тулза: JavaScript Memory Validator (http://www.softwareverify.com/javasc...ory/index.html). Это коммерческая тулза (доступна бесплатная полнофункциональная версия для ознакомления в течении 30 дней), которая отображает список объектов в памяти, выделает объекты число которых растет от поколения к поколению (т.е. после очередного сбора мусора), что может говорить потенциальных ошибках в коде из-за которых объекты во время не освобождаются, выделяет предположительно проблемные места (Hotspot) - объекты занимающие больше всего памяти, можно также посмотреть все события, читай - лог, выделения памяти и работы сборщика, график расхода памяти во времени. Правда есть одно два НО:
1) не работает для IE (хотя это не проблема т.к. скорее использование этой тулзы будет направлено на поиск логических ошибок из-за которых во время не происходит освобождение объектов JavaScript, а не на поиск жестких утечек памяти, для чего есть JavaScript Memory Leak Detector);
2) для Fire Fox работает до версии 3.0.2 включительно, т.е. на время тестирования придется ставить старую версию Fire Fox.

PS. Увы JavaScript Memory Validator не позволяет на ряду с объектами JavaScript понаблюдать за объектами DOM

how 05.08.2012 15:09

И память и CPU лучше профилировать в Google Chrome. Вот статья на хабре - http://habrahabr.ru/post/149053/


Часовой пояс GMT +3, время: 12:39.