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

在PHP中解析RSS提要的最快方法是什么?,php,rss,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 applicatio

我在我们的网站上拉了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>';          
    }
}
?>


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

我不确定Gzip是否会对解析时间产生积极影响,它会减少下载时间,但仅此而已

您应该考虑使用SAX解析器而不是SimeXML:< /P>

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


看看这个

你似乎在根据每个用户请求在线解析你的订阅源。
它总是很慢。这是网络,你知道

阅读RSS提要的唯一明智的方法是异步方式。一个脚本用于定期解析它们并更新本地数据库,另一个脚本用于显示本地数据库中的条目


而且,您知道,gzip输出与解析入站数据几乎没有关系。如图所示。

评论和答案摘要:

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

它的“速度”仅与提供提要的服务器一样慢……您是否对不同的步骤进行了计时并找到了瓶颈?Apache中的GZip必须使用输出编码,从服务器到访问者。使用GZip下载外部提要将节省带宽(和下载速度),但会增加处理器负载并增加额外的时间来解压缩响应。是的,@alex似乎有道理。试着将代码的执行速度与一些只从所选提要中读取XML的代码的执行速度进行比较。我强烈怀疑瓶颈在于解析本身。此外,如果这是问题所在,我有理由怀疑您可能会在每次页面加载时从远程主机获得rss。这很糟糕。您的示例不是SAX解析器的示例。它使用DOMDocument,它不是SAX解析器。“更新本地数据库”,这给了我一个好主意。我制作了cronjob,每天凌晨3点更新所有RSS提要,并将数据存储到数据库中,将图像存储到文件夹中,这是最快的方法:)这样解决了问题。