2011-10-05 140 views
-1

我在我們的網站上拉了7個RSS訂閱源並解析。但解析時間非常緩慢,在PHP中解析RSS提要的最佳方式是什麼?在PHP中解析RSS feed的最快方法是什麼?

也有一種方法來GZip更快的解析時間?

我用這個的GZip在我的.htaccess文件,但沒有任何區別

下面是我的.htaccess文件

# compress text, html, javascript, css, xml: AddOutputFilterByType 
DEFLATE text/plain text/html text/xml text/css application/xml 
application/xhtml+xml application/rss+xml application/javascript 
application/x-javascript 

這裏gzip的劇本是我的PHP代碼來解析RSS源

<?php 
function getFeed($feed_url){ 
    $content = file_get_contents($feed_url); 
    $x = new SimpleXMLElement($content); 

    for ($i=0; $i<=4; $i++){ 
     $entry = $x->channel->item[$i]; 

      // if promotion price is set, then use the promotion price instead of Normal Price 
      $normal = $entry->NormalPrice; 
      $promo = $entry->PromotionPrice; 

      // Get the links and titles 
      $image = $entry->Image->Url; 
      $link = $entry->link; 
      $title = $entry->title; 

      if((isset($promo)) && ($promo > 0)){ 
       $price = 'R '.number_format(trim($promo), 2); 
      }else if($normal > 0 && $promo == 0){ 
       $price = 'R '.number_format(trim($normal), 2); 
      }else if((empty($normal) && empty($promo)) || (($normal == 0) && ($promo == 0))){ 
       $price = 'Out Of Stock'; 
      } 


       echo '<div class="rssImages">'; 
       echo '<div class="imageCover">'; 
       echo '<a href="'.$link.'"><img src="'.$image.'" /></a><br /><br />'; 
       echo '</div>'; 
       echo '<div class="rssCntImg">'; 
       echo '<a href="'.$link.'" id="rsslinks">'.$title.'</a> <br />'; 
       echo '</div>'; 
       echo '<strong>'.$price."</strong>"; 
       echo '<label class="cleared"></label>'; 
       echo '</div>';   
    } 
} 
?> 

任何幫助/建議將不勝感激。

+1

定義「非常慢」 –

+1

這只是「慢」爲服務於飼料... – Alex

+0

你有定時的不同步驟,發現您的瓶頸服務器? Apache中的GZip必須使用輸出編碼,從服務器到訪問者。使用GZip下載外部供稿將節省帶寬(和下載速度),但會增加處理器負荷併爲解開響應增加額外時間。 –

回答

3

一看似乎你在線解析您的飼料,對每一個用戶請求。
它總是會很慢。這是網絡,你知道。

唯一明智的閱讀RSS源的方式是異步一。一個腳本經常解析它們並更新本地數據庫,另一個腳本顯示本地數據庫中的條目。

而且,你知道,gzipping 輸出與解析入站數據很少有關。去搞清楚。

+0

「更新本地數據庫」,這給了我一個好主意。我做了cronjob,每天早上在3Am更新所有RSS提要,並將數據存儲到數據庫和圖像到文件夾中,這是最快的方法:)讓它以這種方式解決。 –

1

我不確定Gzip能否對分析時間產生積極影響,它會減少下載時間,但僅此而已。

你應該考慮使用SAX解析器而不是simplexml的的:

Php Doc about SAX Parser
An example

SAX解析器比對大文件的SimpleXML更快(如果它很好用)。 sax解析器使用的內存也較低。

對此answer

+0

您的示例不是SAX解析器的示例。它使用DOMDocument,它不是一個SAX解析器。 –

+0

感謝您的注意,修復它 – grunk

0

的意見和答案摘要:

  • 確保只在需要時分析,分別檢查更新和擔任頁面請求從本地數據庫信息。
  • 確保延遲不是由於遠程服務器的響應速度慢(再次,緩存會緩解)。
  • 除非訂閱源很大,否則任何XML解析器都可以,如果它們很大,可能是延遲的原因...
  • GZip,如前所述是服務器端,您可以指定客戶端你的腳本)接受gzip,例如使用cURL,但是cURL的使用是一個應該單獨詢問的問題。無論如何,它將不會減少解析時間。