LINUX.ORG.RU

JS setInterval, зависает страница

 ,


0

1

Всем привет. Требуется сделать обновляемый, каждую секунду, блок на странице, блок заполняется php-скриптом, нашел варик с JS

	$(document).ready(function(){
		setInterval(function(){
		$("#div_class").load('script.php')
		}, 1000);
	});
и все как бэ гуд, но со временем страница зависает, потому как стакаются запросы xhr, когда их становится более 1000 страница перестает отвечать. Как можно пофиксить такое поведение?

Ответ на: комментарий от urxvt

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

Топикстартеру: завести dirty-флаг, устанавливающийся перед началом запроса и сбрасывающийся при его завершении (как успешном, так и неуспешном). Если флаг не сброшен, на текущем вызове запрос пропускать.

anonymous ()
  var myload  = true;
  function loadfunc(){
      if (myload){
	  myload=false;
	  $("#div_class").load('script.php',function(){
	      myload=true;
	  })
      }
  }

  $(document).ready(function(){
      setInterval(loadfunc, 1000);
  });

  function loadfunc(){
      var myload  = true;
      return function(){
	  if (myload){
	      myload=false;
	      $("#div_class").load('script.php',function(){
		  myload=true;
	      })
	  }}
  }

  $(document).ready(function(){
      setInterval(loadfunc(), 1000);
  });
Int0l ()
Последнее исправление: Int0l (всего исправлений: 1)
Ответ на: комментарий от Int0l

Скорей всего, jQuery тут ни при чем, оно тут просто обвертка вокруг XHR. Обозреватель ограничивает количество одновременных соединений к серверу (там, вроде, меньше 10-ка даже), вот остальные и становятся в очередь.

urxvt ★★★★★ ()