【问题标题】:Caching seems not to work - multi feed缓存似乎不起作用 - 多馈
【发布时间】:2013-07-23 08:39:27
【问题描述】:

我使用 simplepie 来合并 rss 提要。我在此页面上有两个部分,它们对不同的提要执行相同的操作。我对它们进行排序。这是我的代码:

$feeds=array(
'http://feeds.feedburner.com/Belvederegasse',
'http://diealternative.org/zeitschrift/feed/rss/',
'http://diealternative.org/arbeitsklima/feed/rss/',
'http://feeds.feedburner.com/Arbeitszeit',
'http://feeds.feedburner.com/AugeFinance',
    'http://diealternative.org/nulllohnrunden/feed/',
    'http://diealternative.org/bulletin/feed/rss/',
    'http://feeds.feedburner.com/verteilungsgerechtigkeit',
    'http://feeds.feedburner.com/hochschule',
    'http://feeds.feedburner.com/Sozialmilliarde'
);        
$first_items = array();


foreach ($feeds as $url)
{
    $feed = new SimplePie();
    $feed->set_stupidly_fast(true);
    $feed->enable_order_by_date(true);
    $feed->enable_cache(true);
    $feed->set_feed_url($url);
    $feed->init();
    $items_per_feed = 5;

    for ($x = 0; $x < $feed->get_item_quantity($items_per_feed); $x++){
        $first_items[] = $feed->get_item($x);
    }

    unset($feed);
}

function sort_items($a, $b){
    return SimplePie::sort_items($a, $b);
}


usort($first_items, "sort_items");


foreach ($first_items as $item): 

    if ($itemlimit==8) { break; }

        //HTML output

    $itemlimit = $itemlimit + 1;
endforeach; 
?> 

当您访问页面http://diealternative.org 时,加载时间超过 20 秒。这并不奇怪,因为有很多要解析的提要,但是缓存呢?加载后,它不应该重新连接到提要,它应该使用缓存。

为什么每次加载都需要这么长时间。

【问题讨论】:

  • 您的网站在 FF 22 中为我加载了 30 秒。哎哟!你的服务器几岁了?

标签: rss feed simplepie


【解决方案1】:

有几件事:首先,我认为默认情况下它只缓存 60 分钟 - 我将我的设置为 24 小时,以便它保存一整天的缓存。第一次加载很慢,但之后加速。此外,set_stupidly_fast 函数可能会禁用缓存等。

其次,SimplePie 会为您合并提要并按日期排序,您不需要这样的嵌套循环。试试这个:

$max_items_per_feed = 5;  // this pulls the top 5 articles from each feed
$max_items_total = 50;  // this caps the total articles
$feed = new SimplePie();
$feed->set_feed_url($feeds);

// limit the number of items
$feed->set_item_limit($max_items_per_feed);
$feed->enable_cache(true);
$feed->set_cache_duration(86400);  // refresh cache once a day - 24 hrs

// Run SimplePie.
$success = $feed->init();

// This makes sure that the content is sent to the browser as text/html and the UTF-8 character set (since we didn't change it).
$feed->handle_content_type();

foreach ($feed->get_items(0, $max_items_total) as $key=>$item) {
   ...
}

【讨论】:

  • 非对象上的成员函数 set_feed_url() ??? $feeds 数组有什么问题,现在我使用 $key->get_permalink(); ???
  • 您可以将一个提要数组传递给 SimplePie,让它自动获取和排序。
  • 在我的第二个提要中,我得到:致命错误:允许的内存大小为 67108864 字节用尽(试图分配 375801 字节)在 .... 在 SimplePie.php 中找不到用于设置内存的任何变量
  • 这很奇怪,看起来内存量很大...您是否限制了我的示例每个提要的文章数量?
  • 好的,我删除了一些提要,不幸的是它们太大了。但是整个网站仍然很慢。 >24 秒加载。
【解决方案2】:

对我有用的是使用 Simplepie 生成单独的 html 文件。这些我保存到服务器并将它们包含在主页上。通过使用 cronjobs,我可以让它们保持更新。

现在网站的加载时间很好。 (速度提高 150%!)

汤姆

【讨论】:

    猜你喜欢
    • 2011-10-19
    • 2011-09-03
    • 2011-03-09
    • 1970-01-01
    • 2016-04-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多