PHP的多个RSS源(性能)

时间:2010-08-13 08:26:43

标签: php performance rss feeds

在我最近的项目中,我使用多个RSS源。我想只列出所有帖子的最新帖子,并按时间戳排序。

我的问题是,我有大约20种不同的Feed,页面需要6秒才能加载(仅测试10次Feed)。

我能做些什么来使更好

我使用simplexml:

simplexml_load_file($url);

我附加到一个数组:

function appendToArray($key, $value){
$this->array[$key] = $value;
}

在展示它之前我做了krsort:

krsort($this->array);

我应该以某种方式缓存它吗?

4 个答案:

答案 0 :(得分:2)

您可以缓存它们,但如果缓存已过期,您仍然会遇到需要加载时间的网页问题。

你可以有一个在后台运行的PHP脚本(例如通过cron作业)并定期将你订阅的源下载到数据库中,然后你可以在你想要的时候更快地获取/过滤数据显示它。

答案 1 :(得分:0)

你做过调试吗?在代码中的不同位置记录microtime

您会发现加载RSS源而不是解析它需要花费时间,但您可能会发现这是由于每个RSS源生成所需的时间。

将这十个Feed保存为静态xml文件,将脚本指向它们并查看加载速度有多快。

答案 2 :(得分:0)

您可以与curl_multi并行加载RSS源。这可以加速你的脚本,特别是如果你现在正在使用阻止调用。

一个小例子(来自http://www.rustyrazorblade.com/2008/02/curl_multi_exec/):

$nodes = array('http://www.google.com', 'http://www.microsoft.com', 'http://www.rustyrazorblade.com');
$node_count = count($nodes);

$curl_arr = array();
$master = curl_multi_init();

for($i = 0; $i < $node_count; $i++)
{
    $url =$nodes[$i];
    $curl_arr[$i] = curl_init($url);
    curl_setopt($curl_arr[$i], CURLOPT_RETURNTRANSFER, true);
    curl_multi_add_handle($master, $curl_arr[$i]);
}

do {
    curl_multi_exec($master,$running);
} while($running > 0);

echo "results: ";
for($i = 0; $i < $node_count; $i++)
{
    $results = curl_multi_getcontent  ( $curl_arr[$i]  );
    echo( $i . "\n" . $results . "\n");
}
echo 'done';

可在Asynchronous/parallel HTTP requests using PHP multi_curlHow to use curl_multi() without blocking(以及其他)找到更多信息。

BTW要在使用curl_multi加载Feed后处理这些Feed,您当然必须使用simplexml_load_string而不是simplexml_load_file。

答案 3 :(得分:0)

是的,当然缓存是唯一合理的解决方案 最好设置一个cron作业来检索这些feed并在本地存储数据。

相关问题