在PHP中解析RSS提要的最快方法是什么?

时间:2011-10-05 11:26:54

标签: php rss

我已经在我们的网站上提取了7个RSS源并进行了解析。但解析时间非常慢,在PHP中解析RSS提要的最佳方法是什么。

还有一种方法可以让GZip获得更快的解析时间吗?

我在.htaccess文件中使用此GZip但没有区别

这是我的.htaccess文件中的GZip脚本

# 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

这是我解析RSS提要的PHP代码

<?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>';          
    }
}
?>

任何帮助/建议都将不胜感激。

3 个答案:

答案 0 :(得分:3)

您似乎正在每个用户请求上在线解析您的Feed 它总是很慢。你知道,这是网络。

阅读RSS源的唯一合理方法是异步。一个脚本定期解析它们并更新本地数据库,另一个脚本显示来自本地数据库的条目。

而且,您知道,gzipping 输出与解析入站数据几乎没有关系。去图。

答案 1 :(得分:1)

我不确定Gzip是否会对解析时间产生积极影响,它会减少下载时间,但这就是全部。

您应该考虑使用SAX解析器而不是simplexml:

Php Doc about SAX Parser
An example

SAX解析器比大文件上的simplexml快(如果使用得当)。 sax解析器使用的内存也较低。

查看此answer

答案 2 :(得分:0)

评论和答案摘要:

  • 确保您只在需要时进行解析,单独检查更新并在页面请求中提供本地数据库中的信息。
  • 确保延迟不是由于来自远程服务器的响应缓慢(同样,这将通过缓存来缓解)。
  • 除非Feed是巨大的,否则任何XML解析器都会这样做,如果它们是巨大的,那可能是造成延迟的原因......
  • GZip,如服务器端所述,您可以指定客户端(您的脚本)接受gzip,例如使用cURL,但cURL的使用是一个应该单独询问的问题。无论如何,它都不会减少解析时间。