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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> утечка памяти и window.open 
:(
    Опции темы
GrafF812
Дата 27.12.2010, 00:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Всем привет. заметил одну проблему. У меня на сайте есть кнопка, которая открывает новое окно через:
Код

window.open('','myWnd'...);

после его частого закрытия и открытия стал наблюдать некоторую заторможенность браузера FF. Стал смотреть в диспетчер задач, а там следующее:
При открытии окна выделяется некоторое кол-во памяти, но при закрытии освобождается намного меньшее ее кол-во. Таким образом, память засоряется и браузер начинает тормозить (особенно это заметно в FF и Opera, IE вроде не так захламляет память, но все равно тоже присутствует).
Подскажите в чем проблема утечки памяти, или это такая особенность windpw.open()? или я ни так с ней работаю?
PM MAIL   Вверх
casinosoftguru
Дата 27.12.2010, 14:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



возможно поможет установка объекта в null, т.е. 
Код

function popuponclick()
{
my_window = window.open("", "mywindow"); // открываем окно
my_window.document.write('<H1>The Popup Window</H1>');   
my_window.moveTo(500,500);
} 

function closepopup()
{
 if(false == my_window.closed) 
 {
    my_window.close ();
    my_window = null; 
   // вот после выполнения этого кода у меня опера освободила все что заняла, я кликал open close раз 30 а потом в итоге два раза на
   // close нажал и память по показаниям диспетчера задач освободилась
 }
 else
 {
    alert('Window already closed!');
    my_window = null;
 }
}

PM MAIL   Вверх
GrafF812
Дата 27.12.2010, 17:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



casinosoftguru, здесь для закрытия окна Вы использовали метод closepopup(), а нельзя ли как-нибудь навесить на событие закрытия окна?
PM MAIL   Вверх
ksnk
Дата 27.12.2010, 18:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



как-нибудь так
Код

<script>
function popuponclick()
{
my_window = window.open("", "mywindow"); // открываем окно
my_window.document.write('<script type="text/javascript">window.onunload="window.opener && window.opener.closepopup && window.opener.closepopup();"</'+'script><H1>The Popup Window</H1>');   
my_window.document.close();
my_window.moveTo(500,500);
} 
function closepopup()
{
 if(my_window && (false == my_window.closed)) 
 {
    my_window.close ();
    my_window = null; 
   // вот после выполнения этого кода у меня опера освободила все что заняла, я кликал open close раз 30 а потом в итоге два раза на
   // close нажал и память по показаниям диспетчера задач освободилась
 }
 else
 {
    alert('Window already closed!');
    my_window = null;
 }
}
</script>
<input type="button" onclick="popuponclick()" value="open">
<input type="button" onclick="closepopup()" value="close">


вообще-то, imho, кроме callback'а нужно поставить my_window.document.close() после вывода содержимого кона. А озможно тогда не пришлось бы и огород с calback'ом городить...

Это сообщение отредактировал(а) ksnk - 27.12.2010, 18:46


--------------------
Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! user posted image
PM MAIL WWW Skype   Вверх
GrafF812
Дата 27.12.2010, 18:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



ksnk, а через addListerner() можно как-нибудь?
PM MAIL   Вверх
ksnk
Дата 27.12.2010, 19:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Цитата(GrafF812 @  27.12.2010,  18:56 Найти цитируемый пост)
 а через addListerner() можно как-нибудь?

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

Это сообщение отредактировал(а) ksnk - 27.12.2010, 19:07


--------------------
Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! user posted image
PM MAIL WWW Skype   Вверх
GrafF812
Дата 27.12.2010, 19:30 (ссылка)    | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



ksnk, ну просто я не хочу закрывать окно с помощью кнопки
Код

<input type="button" onclick="closepopup()" value="close">

а хочу закрывать с помощью крестика на окне.
PM MAIL   Вверх
ksnk
Дата 27.12.2010, 21:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Цитата(GrafF812 @  27.12.2010,  19:30 Найти цитируемый пост)
а хочу закрывать с помощью крестика на окне. 

а я как сделал? дополнительная скриптовая вставка в window.open именно для этого и нужна. В примере кнопка закрытия в основном оконе служит в том числе и для контроля наличия переменной - освободилась или нет.


--------------------
Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! user posted image
PM MAIL WWW Skype   Вверх
GrafF812
Дата 28.12.2010, 00:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Цитата(ksnk @  27.12.2010,  21:36 Найти цитируемый пост)
а я как сделал? дополнительная скриптовая вставка в window.open именно для этого и нужна. В примере кнопка закрытия в основном оконе служит в том числе и для контроля наличия переменной - освободилась или нет. 

Прошу прощения но я чего-то не понимаю. Вы описали две кнопки и навесили на них два обработчика событий onclick:
Код

<input type="button" onclick="popuponclick()" value="open">
<input type="button" onclick="closepopup()" value="close">


Мое окно не вызывается через input button, а появляется после отработки AJAX запроса, поэтому мне также не нужен input button для закрытия окна. Просто нужно подписаться на событие закрытия этого окна по крестику. Или я чего-то не понимаю?
PM MAIL   Вверх
ksnk
Дата 28.12.2010, 09:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Цитата(GrafF812 @  28.12.2010,  00:33 Найти цитируемый пост)
Или я чего-то не понимаю? 

существенная часть - добавлена скриптовая вставка в новое окно - в параметр my_window.document.write
Код

my_window.document.write('<script type="text/javascript">window.onunload="window.opener && window.opener.closepopup && window.opener.closepopup();"</'+'script><H1>The Popup Window</H1>');   
my_window.document.close();
my_window.moveTo(500,500);




--------------------
Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! user posted image
PM MAIL WWW Skype   Вверх
GrafF812
Дата 28.12.2010, 11:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



ksnk, Прошу прощения, что сразу не понял. Теперь все понятно, Вы знаете сделал так как Вы сказали, но память все равно не освобождается. Я не знаю что это за жесть с FF твориться, но после многократного открытия и закрытия окна (window.open), память постоянно пухнет. 
PM MAIL   Вверх
ksnk
Дата 28.12.2010, 16:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



А в прежнем варианте, без вставки и кнопкой закрытия в том-же окне работало нормально?


--------------------
Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! user posted image
PM MAIL WWW Skype   Вверх
GrafF812
Дата 28.12.2010, 23:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



ksnk, также память кушала, такое впечатление, что это проблема FF. Он очень плохо освобождает выделенную память
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | JavaScript: для новичков | Следующая тема »


 




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


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

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