在我最近的项目中,我使用多个rss提要。我只想列出他们所有的最新帖子,并按时间戳对它们进行排序。
我的问题是,我有大约20个不同的提要,页面需要6秒来加载(仅用10个提要进行测试)。
我该怎么做才能使从更好的中获益?
我使用simplexml:
simplexml_load_file($url);我将其附加到数组中:
function appendToArray($key, $value){
$this->array[$key] = $value;
}就在我展示它之前,我做了一个krsort:
krsort($this->array);我应该把它藏起来吗?
发布于 2010-08-13 08:35:16
你做过任何调试吗?在代码中的各个点记录microtime。
您会发现,需要花费时间来加载RSS提要,而不是解析它,但您可能会发现,这是由于每个RSS提要生成所需的时间。
将这10个提要保存为静态xml文件,将脚本指向它们并查看加载速度。
发布于 2010-08-13 08:41:29
您可以缓存它们,但是如果缓存已经过期,页面仍然会需要很长时间才能加载。
您可以拥有一个在后台运行的PHP脚本(例如,通过cron作业),并定期将订阅的提要下载到数据库中,然后当您想要显示数据时,可以对数据进行更快的抓取/筛选。
发布于 2010-08-13 08:59:51
您可以与多点并行加载RSS提要。这可以加快您的脚本,特别是当您正在使用阻塞调用的时候。
一个小例子(来自主管/):
$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';更多的信息可以在卷曲和多()无阻塞 (以及其他网站)上找到。
顺便说一下,要在使用curl_multi加载提要之后处理它们,您当然必须使用字符串而不是simplexml_load_file。
https://stackoverflow.com/questions/3475134
复制相似问题