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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Поймать утечку памяти в Internet Explorer, ajax-скрипт вешает браузер 
V
    Опции темы
Dionysius
Дата 6.8.2007, 11:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 40
Регистрация: 13.4.2006
Где: Новосибирск

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



Использую библиотеку Sajax для реализации "живой" корзины для интернет-магазина. Принцип такой: пользователь кликает по значку корзины рядом с интересующим его товаром и тот добавляется в корзину (записывается информация в БД, а также происходит вывод информации в браузер).

Вот код функции, которая отображает в браузере данные, полученные от сервера:

Код

function ShowCart(info_box_contents) {
           var str;
           var num = 0;
           var len = info_box_contents.length;
           var tab = d.getElementById('shop_cart');
           tab.removeChild(tab.getElementsByTagName('TBODY')[0]);
           var tbody = d.createElement("TBODY");
           tab.appendChild(tbody);
           var row = d.createElement("TR");
           tbody.appendChild(row);
           var td = d.createElement("TD");
           row.appendChild(td);
           td.innerHTML = '<img src="images/pixel_trans.gif" border="0" alt="" width="100%" height="1">';
           for (var i in info_box_contents) {
                row = d.createElement("TR");
                tbody.appendChild(row);

                td = d.createElement("TD");
                if (info_box_contents[i]['align']) td.align = info_box_contents[i]['align'];
                row.appendChild(td);
                str = '';
                if (i==0) {
                 str = ascii2str (info_box_contents[i]['text']);
                }
                else if (i==2) {
                 objStr = new String(info_box_contents[i]['text']);
                 str = objStr.replace('rub','руб');
                }
                else {
                 str = info_box_contents[i]['text'];
                }
                td.innerHTML = str;
           }
           row = d.createElement("TR");
           tbody.appendChild(row);
           td = d.createElement("TD");
           row.appendChild(td);
           td.innerHTML = '<img src="images/pixel_trans.gif" border="0" alt="" width="100%" height="1">';
}


После нескольких кликов IE вываливается. Отслеживал этот процесс через диспетчер задач Windows, получилась следующая картина: IE занимает около 20 Мб оперативки, затем несколько кликов  - память "подскакивает" до 60 Мб и браузер вываливается.

Подскажите, пожалуйста, как можно найти эту утечку? Конструкций вроде elem.onclick = function(){  ... } не использую.

P.S. Функция конвертации символов:
Код

function ascii2str (str) {
        newstr = '';
     objStr = new String(str);
     arrStr = objStr.split(' ');
     for (var j in arrStr) {
         if (Number(arrStr[j])>127 && Number(arrStr[j])!=176 && Number(arrStr[j])!=177) num = Number(arrStr[j]) + 848;
         else num = Number(arrStr[j]);
         if (num==1016) newstr = newstr + "Ё";
         else if (num==1032) newstr = newstr + "ё";
         else if (num!=0) newstr = newstr + String.fromCharCode(num);
     }
     return newstr;
}


Пример в действии можно посмотреть здесь: хттп://market.z-nsk.ru/index.php/cPath/218_220

Это сообщение отредактировал(а) Dionysius - 6.8.2007, 11:30
PM MAIL WWW   Вверх
Dionysius
Дата 7.8.2007, 11:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 40
Регистрация: 13.4.2006
Где: Новосибирск

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



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


 




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


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

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