2015-06-22 3 views
1

Я использую SimpleXMLElement() для получения данных с веб-сайта, который используется для встраивания данных. Код, я использую выглядит следующим образом:SimpleXMLElement slow performance

$rss = new SimpleXMLElement('http://eliteprospects.com/rss_player_stats2.php?player='.$player_array[0]['embed_stats'], null, true); 
foreach($rss->xpath('channel/item') as $item) 
{ 
    echo utf8_decode($item->description); 
} 

Это прекрасно работает для одного вопроса, загружает данные исключительно медленным с другого сайта, за исключением. Загрузка страницы составляет от 0,5-1 до 2,5-3 секунд.

Есть ли способ, который я могу использовать для загрузки асинхронно, или есть более быстрая функция, которую я должен использовать вместо этого?

Идея, которая пришла на ум, заключалась в том, чтобы загрузить отдельную страницу в iFrame после начальной загрузки страницы или есть лучший способ?

ответ

0

Есть ли способ, который я могу использовать для загрузки асинхронно, или есть , там быстрая функция, которую я должен использовать вместо этого?

К сожалению, нет ничего, чтобы делать долгое время отклика (тривиальным предполагая, что скорость соединения в не архаичное). Также повторение результатов сразу может замедлить рендеринг браузера и, следовательно, время загрузки страницы.

AJAX прекрасно вписывается здесь - ждать window.onload и вызвать вызов AJAX для вашего веб-сервиса (держит фрагмент из вопроса), чтобы подготовить выходной буфер и возвращает ответ в браузер. После этого установите/замените значение innerHTML выбранного элемента DOM на response.responseText.

Псевдо-код

window.onload = function() 
{ 
    var url = 'http://example.com/webserice'; 

    Ajax.get(url, function(response) 
    { 
     var responseText = response.responseText; 

     document.getElementById('someid').innerHTML = responseText; 
    } 
} 

Сниппет Я использую в чистом JS, хотя jQuery has a lot more appealing way to do it

Ajax = { 

    request : {}, 

    createRequest : function() 
    { 
     var request = false; 

     if (window.XMLHttpRequest) 
     { 
      request = new XMLHttpRequest(); 
     } 
     else 
     { 
      if (window.ActiveXObject) 
      { 
       request = new ActiveXObject('MSXML2.XMLHTTP.3.0'); 
      } 
      else 
      { 
       request = false; 
      } 
     } 

     return request; 
    }, 

    get : function(page, callback) 
    { 
     var self = this; 
     var request = this.createRequest(); 

     if (! page) 
     { 
      return false; 
     } 

     request.onreadystatechange = function() 
     { 
      if (request.readyState == 4 && request.status == 200) 
      { 
       delete self.request; 

       if (typeof callback == 'function') 
       { 
        callback(request); 
       } 
       else 
       { 
        self.update(request, callback); 
       } 

       var regex = /<script\b.*?>([\s\S]*?)<\/scri/ig; 
       var match; 
       while (match = regex.exec(request.responseText)) 
       { 
        eval(match[1]); 
       } 
      } 
     } 

     request.open('GET', page, true); 
     request.setRequestHeader('X-Requested-With', 'ajax'); 
     request.send(null); 
    } 
} 
+0

Пожалуйста, дайте мне знать причину downvote. :) – sitilge

+0

Хм да, это, наверное, лучший метод, имеет больше смысла, чем iFrame – JimmyBanks