Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 02.03.2010, 17:36
Интересующийся
Отправить личное сообщение для prike Посмотреть профиль Найти все сообщения от prike
 
Регистрация: 18.06.2009
Сообщений: 11

Профилирование 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, но, если не ошибаюсь, то что мне нужно он не позволяет сделать.
Ответить с цитированием
  #2 (permalink)  
Старый 02.03.2010, 17:43
Новичок на форуме
Отправить личное сообщение для Kolyaj Посмотреть профиль Найти все сообщения от Kolyaj
 
Регистрация: 19.02.2008
Сообщений: 9,177

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

В любом случае обрабатывать в браузере 50 МБ данных как-то слегка неправильно.
Ответить с цитированием
  #4 (permalink)  
Старый 12.03.2010, 18:17
Интересующийся
Отправить личное сообщение для prike Посмотреть профиль Найти все сообщения от prike
 
Регистрация: 18.06.2009
Сообщений: 11

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

Последний раз редактировалось prike, 12.03.2010 в 18:27.
Ответить с цитированием
  #5 (permalink)  
Старый 05.08.2012, 15:09
how how вне форума
Новичок на форуме
Отправить личное сообщение для how Посмотреть профиль Найти все сообщения от how
 
Регистрация: 05.08.2012
Сообщений: 3

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



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Помогите с javascript andruhin Общие вопросы Javascript 12 04.05.2012 10:05
Собрался силами, собираюсь освоить Javascript walker Общие вопросы Javascript 14 20.03.2012 15:17
JavaScript на Яндекс.Фотки - почему тормозит браузеры? ZavFirefox Javascript под браузер 23 27.09.2009 19:24
Утечки памяти: как сделать ? Draeden Events/DOM/Window 10 30.08.2009 18:16
Быстрый поиск объектов Shasoft Общие вопросы Javascript 7 30.07.2009 05:28