Javascript.RU

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

утечка памяти. $.post
Добрый день. Пишу первый гаджет для боковой панели vista (то есть работа идет только в IE7 и выше), нашел утечку памяти в его простом коде

$().ready(main);


function main(){
	if ($('#left').is(':empty')) $('#preloader').show();
	$.post("http://example.com",callback);
}

function callback(data){
	$('#preloader').hide();
	var post_server = $(".table1",data).find("tr:eq("+server+")").find("td:eq(0)").find("b").text();
	var post_online = $(".table1",data).find("tr:eq("+server+")").find("td:eq(2)").text();

	$('#left').html(post_server);	
	$('#right').html(post_online);

}


setInterval(main,180000);


через несколько часов работы гаджет сжирает просто огромное количество памяти.

Гуру, помогите советом по мере сил, а то я пока разобраться не могу.

Что нужно сделать, чтобы очистить все неиспользуемые объекты-переменные дабы при каждой итерации память не накапливалась?
Ответить с цитированием
  #2 (permalink)  
Старый 14.08.2010, 12:27
Аватар для subzey
Пионэр
Отправить личное сообщение для subzey Посмотреть профиль Найти все сообщения от subzey
 
Регистрация: 16.11.2009
Сообщений: 1,322

Вроде, причин для утечки нет. Если $.ajax убивает xhr после вызова callback, то все scope должны тихо мирно самоубиваться.

Кстати говоря, столкнулся с тем, что при активном использовании $.post firefox тоже без причины съедает всю память, так что, за темой буду следить внимательно.
Ответить с цитированием
  #3 (permalink)  
Старый 14.08.2010, 12:43
Отправить личное сообщение для Octane Посмотреть профиль Найти все сообщения от Octane  
Регистрация: 10.07.2008
Сообщений: 3,873

Как можно додуматься засунуть jQuery в гаджет рабочего стола!?
Ответить с цитированием
  #4 (permalink)  
Старый 16.08.2010, 07:40
Интересующийся
Отправить личное сообщение для otvernu Посмотреть профиль Найти все сообщения от otvernu
 
Регистрация: 12.08.2010
Сообщений: 10

Сообщение от Octane
Как можно додуматься засунуть jQuery в гаджет рабочего стола!?
можно вот так:
<script src="js/jquery-1.4.2.min.js" type="text/javascript"></script>
Ответить с цитированием
  #5 (permalink)  
Старый 17.08.2010, 06:53
Интересующийся
Отправить личное сообщение для otvernu Посмотреть профиль Найти все сообщения от otvernu
 
Регистрация: 12.08.2010
Сообщений: 10

не знаю как насчет $.post, но от ajax функций от jQuery пришлось отказаться. До сих пор не узнал как очищать память от $.post.

Делаю как показано в этой статье (без jQuery, просто голый JavaScript) - все прекрасно работает, утечек памяти нет: http://www.nik0las.ru/blog/2009/06/1...aks_at_ie.html


осталось разузнать как теперь разбирать пришедший ответ с сервера и все будет ок.


Вот такая конструкция не работает (внутри функции getServerData).
qw = $('#d1',_request.responseText).text();
			alert(qw);


при условии, что сервер отдает такой ответ:
<html>
<head>
</head>
<body>
	<div id='d1'>server</div>
	<div id='d2'>client</div>
</body>
</html


кто поможет с разбором?
Ответить с цитированием
  #6 (permalink)  
Старый 17.08.2010, 07:56
Новичок на форуме
Отправить личное сообщение для Kolyaj Посмотреть профиль Найти все сообщения от Kolyaj
 
Регистрация: 19.02.2008
Сообщений: 9,177

var qw = _request.responseText;
Ответить с цитированием
  #7 (permalink)  
Старый 17.08.2010, 08:46
Интересующийся
Отправить личное сообщение для otvernu Посмотреть профиль Найти все сообщения от otvernu
 
Регистрация: 12.08.2010
Сообщений: 10

я понимаю, что ответ сервера хранится в свойстве _request.responseText
Я могу вывести весь ответ, а как вывести его часть? Если в ответ приходит html код, в котором проставлены id-шники на определенных дивах, то можно ли извлечь информацию с определнного айдишника?



Расписываю подробнее
вот ответ сервера:
<html>
<head>
</head>
<body>
	<div id='d1'>server</div>
	<div id='d2'>client</div>
</body>
</html>

(я хочу оттуда достать строчку 'server', которая находится в div с id = ''d1")

в первом посте я публиковал функцию, использующую jQuery, которая все это легко делала (на другом ответе сервера находила нужный элемент) вот она
function callback(data){
	    $('#preloader').hide();
	    var post_server = $(".table1",data).find("tr:eq("+server+")").find("td:eq(0)").find("b").text();
	    var post_online = $(".table1",data).find("tr:eq("+server+")").find("td:eq(2)").text();
	 
	    $('#left').html(post_server);  
	    $('#right').html(post_online);
	 
	}

то есть тут ответ сервера хранится в переменной data, с помощью селекторов jQuery парсим ответ и достаем нужный элемент.


Сейчас я отказался от функции $.post (потому что из-за нее происходили адские утечки памяти) и переписал скриптик на "голом" JavaScript
Теперь ответ сервера должен обрабатываться как-то по другому.

Вот функция аналог callback'а:
function getServerData() {
    var _request = getHttpRequest();
 
    _request.onreadystatechange = function() {
        if (_request.readyState == 4 && _request.status == 200) {
            			
			alert(_request.responseText);
			
			
			count ++;
			_request = null;
        
		}
    }
    _request.open("POST", "http://test/req/server.php", true);
    _request.send(null);
}



в alert я передаю полный ответ сервера, хранящийся в _request.responseText

alert естественно выводит вот что:


как мне разобрать _request.responseText На составляющие и вывести только содержимое div'а c id = 'd1'?

надеюсь изложил свой вопрос довольно подробно, кто может помочь?
Ответить с цитированием
  #8 (permalink)  
Старый 17.08.2010, 08:49
Новичок на форуме
Отправить личное сообщение для Kolyaj Посмотреть профиль Найти все сообщения от Kolyaj
 
Регистрация: 19.02.2008
Сообщений: 9,177

Если вам нужно парсить ответ сервера, так отдавайте сервером легко парсящийся ответ, JSON, например. Или ответ сервера не вы формируете?
Ответить с цитированием
  #9 (permalink)  
Старый 17.08.2010, 08:53
Интересующийся
Отправить личное сообщение для otvernu Посмотреть профиль Найти все сообщения от otvernu
 
Регистрация: 12.08.2010
Сообщений: 10

Ответ сервера формирую не я.
Ответ сервера - просто html страничка, ну допустим какой-нить yandex.ru
Я хочу его распарсить.
Ответить с цитированием
  #10 (permalink)  
Старый 17.08.2010, 09:01
Новичок на форуме
Отправить личное сообщение для Kolyaj Посмотреть профиль Найти все сообщения от Kolyaj
 
Регистрация: 19.02.2008
Сообщений: 9,177

Выдирайте содержимое body, кладите его в div, а оттуда уже DOM-методами.
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Утечка памяти jeepers Общие вопросы Javascript 3 05.12.2014 01:13
jQuery + Google Chrome ( утечка памяти ??? ) idler jQuery 4 24.04.2010 14:09
Как удалить из памяти весь XML документ? EisBerg Events/DOM/Window 1 03.04.2010 14:45
Как происходит утечка памяти в даном случае? Yazla Общие вопросы Javascript 2 09.11.2009 13:02
Утечки памяти: как сделать ? Draeden Events/DOM/Window 10 30.08.2009 18:16