Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 24.08.2010, 09:00
Аватар для Phoenix
Профессор
Отправить личное сообщение для Phoenix Посмотреть профиль Найти все сообщения от Phoenix
 
Регистрация: 24.09.2007
Сообщений: 165

Разрастается память при AJAX
Добрый день. У меня возникла проблема с памятью. В программе используется библиотека JQuery. На странице идет вызов функции через определенный интервал времени и с каждым разом занимаемый размер памяти увеличивается.

Вызываемая функция:
setInterval("gettime()", 10);

function gettime(){
		$.post(	'<? echo SITE_URL; ?>includes/function_.php?act=que_time',
				{
				},
				 function(data){
					if (data){
						if (data.length == 5){
							$("#time").html(data);
							//document.getElementById('time').innerHTML = data;
						}
					}
				 });
}
		 });
			}


Функция отвечающая:
if ($act == "que_time"){
	//ajax_enter();
	ob_start();
	echo date("H:i", time());
	$ret = ob_get_contents();
	ob_end_clean();
	echo $ret;
	//echo ajax_return($ret);
}


возможно ли оптимизировать?
__________________
После каждой девятки все снова с нуля,
Все снова с нуля, но не сначала...
Ответить с цитированием
  #2 (permalink)  
Старый 24.08.2010, 10:02
Аватар для B~Vladi
Модератор Всея Форума
Отправить личное сообщение для B~Vladi Посмотреть профиль Найти все сообщения от B~Vladi
 
Регистрация: 14.05.2009
Сообщений: 4,021

Для начала вынеси callback-функцию и передавай ссылку на неё:

function callback(data){
  if (data && data.length == 5){
    $("#time").html(data);
    //document.getElementById('time').innerHTML = data;
  }
}

function gettime(){
  $.post('<? echo SITE_URL;?>includes/function_.php?act=que_time', null, callback);
}

setInterval(gettime, 10);


Ну и небольшой рефакторинг. Если не поможет - отруби JQ.
PS: заметь, как все стало намного читабельнее...
Ответить с цитированием
  #3 (permalink)  
Старый 24.08.2010, 10:11
Аватар для B~Vladi
Модератор Всея Форума
Отправить личное сообщение для B~Vladi Посмотреть профиль Найти все сообщения от B~Vladi
 
Регистрация: 14.05.2009
Сообщений: 4,021

А вообще не обязательно дергать сервер для получения времени. Можно его получить 1 раз и далее вычислять изменения на клиенте, относительно его времени.

Для таких таймеров лучше не использовать setInterval, а такую конструкцию:
(function(){
  // Нужные действия
  setTimeout(arguments.callee, 10);
})();


Если я замечу, что какой-нибудь сайт шлет запросы каждые 10 мс (ну или хотя бы каждые 3-5 секунд) - я никогда больше на него не зайду.
Ответить с цитированием
  #4 (permalink)  
Старый 24.08.2010, 10:47
Аватар для Gvozd
Матрос
Отправить личное сообщение для Gvozd Посмотреть профиль Найти все сообщения от Gvozd
 
Регистрация: 04.04.2008
Сообщений: 6,246

Сообщение от B~Vladi
Если я замечу, что какой-нибудь сайт шлет запросы каждые 10 мс (ну или хотя бы каждые 3-5 секунд) - я никогда больше на него не зайду.
не держать тебе блог на WordPress)))
Ответить с цитированием
  #5 (permalink)  
Старый 24.08.2010, 10:52
Аватар для B~Vladi
Модератор Всея Форума
Отправить личное сообщение для B~Vladi Посмотреть профиль Найти все сообщения от B~Vladi
 
Регистрация: 14.05.2009
Сообщений: 4,021

Сообщение от Gvozd
не держать тебе блог на WordPress)))
Аха, я уже наслышан о нем
Ответить с цитированием
  #6 (permalink)  
Старый 24.08.2010, 11:21
Аватар для Phoenix
Профессор
Отправить личное сообщение для Phoenix Посмотреть профиль Найти все сообщения от Phoenix
 
Регистрация: 24.09.2007
Сообщений: 165

Сообщение от B~Vladi Посмотреть сообщение
А вообще не обязательно дергать сервер для получения времени. Можно его получить 1 раз и далее вычислять изменения на клиенте, относительно его времени.

Для таких таймеров лучше не использовать setInterval, а такую конструкцию:
(function(){
  // Нужные действия
  setTimeout(arguments.callee, 10);
})();


Если я замечу, что какой-нибудь сайт шлет запросы каждые 10 мс (ну или хотя бы каждые 3-5 секунд) - я никогда больше на него не зайду.
это пример (на самом деле функции сложнее, но даже эта функция набирает память). у меня свой внутренний модуль (пользователи не видят его). грузится мой компьютер, через часов 6 работы бывает подвисание браузера.

п.с. в рабочем варианте таймеры другие стоят (но нагрузка идет)
__________________
После каждой девятки все снова с нуля,
Все снова с нуля, но не сначала...
Ответить с цитированием
  #7 (permalink)  
Старый 25.08.2010, 16:14
Аватар для Phoenix
Профессор
Отправить личное сообщение для Phoenix Посмотреть профиль Найти все сообщения от Phoenix
 
Регистрация: 24.09.2007
Сообщений: 165

function getXmlHttp(){
  var xmlhttp;
  try {
	xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
  } catch (e) {
	try {
	  xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
	} catch (E) {
	  xmlhttp = false;
	}
  }
  if (!xmlhttp && typeof XMLHttpRequest!='undefined') {
	xmlhttp = new XMLHttpRequest();
  }
  return xmlhttp;
}

xmlhttp.open('GET', '<? echo SITE_URL; ?>includes/function_.php?act=que_time', true);
xmlhttp.onreadystatechange = function() {
  if (xmlhttp.readyState == 4) {
	 if(xmlhttp.status == 200) {
	   callback_time(xmlhttp.responseText);
		 }
  }
};
xmlhttp.send(null);


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

Сообщение от Phoenix
есть еще какие либо идеи?
Сообщение от Phoenix
setInterval("gettime()", 10);
Поставить реальное число, вместо 10.
Ответить с цитированием
  #9 (permalink)  
Старый 25.08.2010, 16:22
Аватар для Phoenix
Профессор
Отправить личное сообщение для Phoenix Посмотреть профиль Найти все сообщения от Phoenix
 
Регистрация: 24.09.2007
Сообщений: 165

Сообщение от Kolyaj Посмотреть сообщение
Поставить реальное число, вместо 10.
и стоит реальное число. просто за рабочий день набегает объем. а так я его нагоняю за 5-10 минут... в идеале надо, что бы память не терялась!
__________________
После каждой девятки все снова с нуля,
Все снова с нуля, но не сначала...
Ответить с цитированием
  #10 (permalink)  
Старый 25.08.2010, 16:25
Новичок на форуме
Отправить личное сообщение для Kolyaj Посмотреть профиль Найти все сообщения от Kolyaj
 
Регистрация: 19.02.2008
Сообщений: 9,177

Это некорректно. За 10 миллисекунд даже локальный сервер не успеет ответить, следовательно, делается несколько параллельных запросов, параллельно можно делать конечное количество запросов, поэтому они ждут где-то в очереди браузера. В результате вы тестируете вовсе не то, что у вас есть на самом деле.
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Проверка наличия логина в БД при регистрации, с помощью ajax storng Общие вопросы Javascript 4 09.04.2010 20:24
Отключить передачу cookie при ajax запросе. С.Тарасов AJAX и COMET 15 30.11.2009 15:24
При наборе адреса с www не работает AJAX (JQuery)! madmis AJAX и COMET 3 23.11.2009 19:03
Кодировка при использовании Ajax Nichloas AJAX и COMET 9 17.09.2009 16:06
Неверный результат в AJAX с получением HTML Raynor AJAX и COMET 3 17.12.2008 18:38