2015-06-22 118 views
1

我正在使用SimpleXMLElement()從網站獲取數據,該網站用於嵌入數據。我使用的代碼如下:SimpleXMLElement性能下降

$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-1s到2.5-3s。

是否有一種方法可以使用,異步加載,或者我應該使用更快的函數嗎?

想到一個想法是在初始頁面加載後在iFrame中加載單獨的頁面,還是有更好的方法?

回答

0

有沒有一種方法,我可以使用,加載異步,或者是 有一個更快的函數,我應該使用呢?

不幸的是,沒有什麼可以做一下響應時間長(平凡假設沒有過時的連接速度)。同時一次回顯結果可能會降低瀏覽器渲染速度,從而降低頁面加載時間。

AJAX很好地適應這裏 - 等待window.onload和觸發AJAX調用Web服務的(持有問題的片段)準備輸出緩衝區,並返回到瀏覽器的響應。之後,將所選DOM元素的innerHTML值設置爲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