Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

HTML+CSS+JavaScript

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Утечка памяти в чате
 
 автор: Drago   (10.09.2007 в 21:45)   письмо автору
 
 

Такая проблема, при общении в чате, начала происходить утечка памяти, в результате которой, чат намертво "вешает" браузер. Помогает только его перезапуск.

Сообщение добавляются таким образом

top.frames['message'].document.body.innerHTML += 'new message';


Может проблема быть в таком способе добавления или стоит искать в другом направлении?

   
 
 автор: bronenos   (10.09.2007 в 22:22)   письмо автору
 
   для: Drago   (10.09.2007 в 21:45)
 

чат на аяксе?
если да - после запроса очищайте объект

   
 
 автор: Drago   (10.09.2007 в 23:06)   письмо автору
 
   для: bronenos   (10.09.2007 в 22:22)
 

дело в том, что я использую библиотеку jshttprequest и сам аякс объекты не создаю.

   
 
 автор: bronenos   (11.09.2007 в 00:37)   письмо автору
 
   для: Drago   (10.09.2007 в 23:06)
 

получаете готовый хтмл-код или парсите?

   
 
 автор: Drago   (11.09.2007 в 01:02)   письмо автору
 
   для: bronenos   (11.09.2007 в 00:37)
 

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

То есть, к примеру, если в строке содержиться текст "addtext('text');". То в браузере исполниться функция addtext().

Эта функция обрабатывает передаваемые ей параметры, и выводит сообщение, с помощью описанного, в первом посте, действия.

   
 
 автор: bronenos   (11.09.2007 в 10:05)   письмо автору
 
   для: Drago   (11.09.2007 в 01:02)
 

дайте-ка ссылку на ваш чат, посмотрю
(так уверены, что это - особенность? =) )

   
 
 автор: Drago   (11.09.2007 в 17:00)   письмо автору
 
   для: bronenos   (11.09.2007 в 10:05)
 

>дайте-ка ссылку на ваш чат, посмотрю
отправил вам на е-маил

>(так уверены, что это - особенность? =) )
пусть не особенность, просто в других попавшихся мне библиотеках, такой способ получения данных, не был столь акцентирован :)

   
 
 автор: bronenos   (11.09.2007 в 17:43)   письмо автору
 
   для: Drago   (11.09.2007 в 17:00)
 

я тоже позаимствовал этот способ))

   
 
 автор: bronenos   (11.09.2007 в 17:49)   письмо автору
 
   для: Drago   (11.09.2007 в 17:00)
 

вы мне в асю стукните (4110863) - поговорим насчет этого (представьтесь тока )))

   
 
 автор: Crux   (13.09.2007 в 08:25)   письмо автору
 
   для: Drago   (10.09.2007 в 23:06)
 

>дело в том, что я использую библиотеку jshttprequest и сам аякс объекты не создаю.

неверно, объект вы как раз создаёте

var req = new Subsys_JsHttpRequest_Js();


его и надо почистить

   
 
 автор: Drago   (13.09.2007 в 19:23)   письмо автору
 
   для: Crux   (13.09.2007 в 08:25)
 

Я использую версию библиотеки 4.15. И единственный объект, который я создаю, это

var req = new JsHttpRequest();


Но, это происходит внутри функции

function loadrequest(actionfile,query)
    {
    var req = new JsHttpRequest();
    req.onreadystatechange = function()
        {        
        if (req.readyState == 4)
            {
            eval(req.responseJS.func);
            scrolldiv();
            if (req.responseText)
                document.getElementById('errors').innerHTML = req.responseText;
            }
        }
    req.open('POST', actionfile, true);
    req.send( { text:query } );
    }


А значит, переменная req, является локальной и должна сама очищаться при завершении выполнения функции.

   
 
 автор: Balamut182   (12.09.2007 в 00:07)   письмо автору
 
   для: Drago   (10.09.2007 в 21:45)
 

Попробуйте добаdлять c помощью

join( );

а не

+=

   
 
 автор: bronenos   (12.09.2007 в 16:59)   письмо автору
 
   для: Balamut182   (12.09.2007 в 00:07)
 

я тоже += делаю, у меня утечек нет

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования