Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/258.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP RSS提要阅读器的效率_Php_Performance_Rss_Feed - Fatal编程技术网

PHP RSS提要阅读器的效率

PHP RSS提要阅读器的效率,php,performance,rss,feed,Php,Performance,Rss,Feed,我从XML提要读取数据,如下所示: $data=file_get_contents("mydata.rss"); $data=simplexml_load_string($data); foreach($data->channel->item as $item){ $articles[] = array( 'description' => (string)$item->description,

我从XML提要读取数据,如下所示:

$data=file_get_contents("mydata.rss");

$data=simplexml_load_string($data);

foreach($data->channel->item as $item){ 

     $articles[] = array(
                    'description' => (string)$item->description,
                    'link' => (string)$item->link,
                    'pubDate' => (string)$item->pubDate,);

} 
问题是feed很长,可能有100个条目。我只想读前10页。我可以通过手动设置一个计数器,然后在foreach循环中使用if语句来解决这个问题,但我认为这不是最好的方法,因为整个提要仍然被读取,因此增加了不必要的开销

在不阅读整个提要的情况下实现这一点的最有效方法是什么


提前感谢…

使用SimpleXML,正如您所说,您将所有文件加载到内存中,然后对其进行解析。然后迭代内存中加载的元素

使用类似SAX的解析器,将允许您不读取完整文件。我不知道具体是如何实现的,但SAX中的aproach是在每次检测到新元素时触发一个事件。然后,当类型为“item”的第10个元素关闭时,您可以开始读取RSS并停止解析


此aproach具有更小的内存占用空间和更快的速度。另一方面,迭代XML元素并不容易。

如果不读取/解析整个提要,它将是无效的XML,并导致simplexml失败。除此之外,您可以将foreach更改为for循环,但与a计数器之间的差异将是最小的。可能在获取提要的地方会接受一个参数来限制条目的数量。您可以添加maxlen,但必须猜测该值,然后处理一个损坏的xml提要。也许您经常检索提要?你能每天(hoully)这样做并在本地存储10个吗?你可以使用旧的基于expat的xml解析器为你提供对xml的事件驱动访问-感谢回复的家伙们,看起来我应该限制提要,而不是限制我从提要中读到的内容。值得深思的是。。。