Модераторы: Sardar, Aliance
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> GWT. Утечка памяти. Profiler, tools, etc. 
:(
    Опции темы
unkis
Дата 30.8.2010, 11:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 802
Регистрация: 8.9.2004

Репутация: нет
Всего: 1



Ребята у меня следуюшая проблема:

Мы используем в своём проекте GWT а именно SmartGWT.
Столкнулись с проблемой что браузер, в нашем случае FF, не освобождает память.

Первое что приходит на ум, это то что некие компоненты, объекты не уничтожаются и продолжают висеть в памяти.

Вот и вопрос существует ли какие-нибудь программы, профайлеры (JavaScript скорей всего),  которые могут мне почь понять, какие объекты, компоненты в браузере висят и "жрут" много памяти?


Зарание спасибо


--------------------
www.unkis.com
PM MAIL WWW   Вверх
powerOn
Дата 30.8.2010, 12:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


software saboteur
****


Профиль
Группа: Участник
Сообщений: 4367
Регистрация: 7.10.2005

Репутация: нет
Всего: 159



Ну если точно известно, что браузер не освобождает память, то лучше в JS разделе спросить. А как работает в других браузерах? И в чем проявляется утечка, сообщение об ошибке имеется?


--------------------
user posted image нет времени думать - нужно писать КОД!

PM MAIL   Вверх
unkis
Дата 30.8.2010, 13:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 802
Регистрация: 8.9.2004

Репутация: нет
Всего: 1



Цитата(powerOn @ 30.8.2010,  10:41)
Ну если точно известно, что браузер не освобождает память, то лучше в JS разделе спросить. А как работает в других браузерах? И в чем проявляется утечка, сообщение об ошибке имеется?

сообщение об ошибки нет, но видно как память браузера растёт после манипулязии с  "GWT компонентами".




--------------------
www.unkis.com
PM MAIL WWW   Вверх
powerOn
Дата 31.8.2010, 09:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


software saboteur
****


Профиль
Группа: Участник
Сообщений: 4367
Регистрация: 7.10.2005

Репутация: нет
Всего: 159



Тогда лучше в JS разделе спросить, перенесу тему.


--------------------
user posted image нет времени думать - нужно писать КОД!

PM MAIL   Вверх
magelan
Дата 2.9.2010, 13:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


потерял xPath
**


Профиль
Группа: Участник
Сообщений: 393
Регистрация: 5.4.2010

Репутация: 2
Всего: 16



Вчера думал, не решился ответить.

Проблема в том, что за утечкой памяти обычно никто не следит и использование сторонних библиотек только усложняет задачу.

В javascript есть только один способ управлять памятью - удаление элемента масива с помощью функции delete.
Как ведет себя браузер с памятью - можно лишь догадываться.

Исходя из того, что у нас есть, рекомендую пересмотреть сам подход:

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

Задачка, прямо скажу, непростая, но реализуемая.
PM MAIL   Вверх
ksnk
Дата 2.9.2010, 15:58 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


прохожий
****


Профиль
Группа: Комодератор
Сообщений: 6855
Регистрация: 13.4.2007
Где: СПб

Репутация: 84
Всего: 386



Для IE6 были простые и в меру надежные способы диагностики утечек памяти. Выглядело это как программка , которая открывала нужный сайт и давала возможность при закрытии странички просмотреть наличие неосвобожденных переменных JS.
Неосвобождение переменных было связано с тем, что при функционировании странички в данных скрипта конструировались циклические ссылки на DOM объекты. Классический минимальный пример
Код

var a = document.getElementById('id_a'),
    b = document.getElementById('id_b');
a.linkedto=b;
b.linkedto=a;

Такой рекурсивный цикл вызывал клинч у системы освобождения памяти, оба дом объекта оставались в памяти при перезагрузке страницы. Более загадочные для детектирования рекурсивные списки получались при задании обработчиков событий
Код

function setuponclick(){
  var a = document.getElementById('id_a'),
      b = document.getElementById('id_b');
  a.onclick=function(){alert('click a');}
  b.onclick=function(){alert('click b');}
}
 казалось бы, при чем тут рекурсия? однако из за особенностей реализации замыканий, во все функции, в управляющие функцией структуры попадали ссылки на все локальные переменные функции, в пределах которой она описывалась. Итого - та-же рекурсивная ссылка, только естественным для программиста способом  smile 
Такая простота в получении довольно неприятного бага вызвала в кругах JS программистов панические настроения и даже отказ от использования анонимных функций в скриптах ;) Только появление версии IE с законопаченным багом несколько сгладило ситуацию.
Стандартное решение, которое помогало в большинстве случаев - по выходу из странички удалить все установленные скриптом обработчики событий, и почистить ссылки на элементы.

Для jQuery даже была введена конструкция .data, которая позволяет привязывать к DOM - объекту любые данные. не беспокоясь особенно об утечках памяти.

С другой стороны, багливость IE поддавалась детектированию и исправлению, а вот баги с памятью FF пока детектированию широкими массами трудящихся не поддаются.

Опять-же imho, большинство(если не все) баги с памятью в FF связаны с криво написанными плагинами FF. Можно отключить все плагины и посмотреть, что получится. 



Это сообщение отредактировал(а) ksnk - 2.9.2010, 16:06


--------------------
Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! user posted image
PM MAIL WWW Skype   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Форум для вопросов, которые имеются в справочниках, но их поиск вызвал затруднения, или для разработчика требуется совет или просьба отыскать ошибку. Напоминаем: 1) чётко формулируйте вопрос, 2) приведите пример того, что уже сделано, 3) укажите явно, нужен работающий пример или подсказка о том, где найти информацию.
 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | JavaScript: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0477 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.