Показать сообщение отдельно
  #1 (permalink)  
Старый 18.12.2017, 18:52
Кандидат Javascript-наук
Отправить личное сообщение для biryukovm Посмотреть профиль Найти все сообщения от biryukovm
 
Регистрация: 13.12.2013
Сообщений: 110

Частая загрузка XML не нагружая память
Привет всем. Я в интернете много почитал библиотеки и немного не понимаю некоторых моментов.
У меня есть скрипт который ображается к URL (моему) и получаю файл в виде XML формата и проблема такая что грузится память хотя я все вродебы чищу или нет не пойму. Подскажите как правильно мне его составить , вот 2 образца что я нашел они оба работают но память забивается.
Я обращаюсь к скрипту с переодичностью 3 сикунды, но хотелось бы быстрее.


Пример 1
setInterval(lin, 3000);
function lin() {
    var request;
    if(window.XMLHttpRequest){request = new XMLHttpRequest();}else{request = new ActiveXObject("Microsoft.XMLHTTP");}
    request.open('GET','/infoxml', true);
    //request.open('GET', '/infoxml' + Math.random(), true);
    request.onreadystatechange = function() {
        if (request.readyState != 4) return;
        clearTimeout(xhrTimeout); // очистить таймаут при наступлении readyState 4
        if (request.status==200) {
            //console.log(this.responseText);
            console.log(request.responseXML.getElementsByTagName('sport')[1].firstChild.nodeValue);
            
            
        }else{
            handleError(request.statusText) // вызвать обработчик ошибки с текстом ответа
        }
    
    }
    request.send();
    //request.abort();    
    request = null;    
    
}


Пример 2
setInterval(lin, 3000);
function lin() {
var xhr;
if(window.XMLHttpRequest){xhr = new XMLHttpRequest();}else{xhr = new ActiveXObject("Microsoft.XMLHTTP");}
xhr.open("POST", "/infoxml", true);
xhr.onreadystatechange=function(){
  if (xhr.readyState != 4) return
  clearTimeout(xhrTimeout) // очистить таймаут при наступлении readyState 4
  if (xhr.status == 200) {
      console.log(xhr.responseXML.getElementsByTagName('sport')[1].firstChild.nodeValue);
  }else{
      handleError(xhr.statusText) // вызвать обработчик ошибки с текстом ответа
  }
}
xhr.send();
}

var xhrTimeout = setTimeout( function(){ xhr.abort(); handleError("Timeout") }, 7000);// Таймаут 3 секунд
function handleError(message) {
  // обработчик ошибки
  alert("Ошибка: "+message)
}



Эти оба примера перегружают память и не могу понять почему подскажите как правильно обращаться.
Ответить с цитированием