【问题标题】:PHP reading live rss feeds, the fastest wayPHP阅读实时RSS提要,最快的方式
【发布时间】:2011-11-14 15:58:09
【问题描述】:

我正在构建一个从不同站点读取 rss 提要的网络应用程序。在每个提要上,我都可以在 url 中添加一个搜索键,因此提要总是不同的。

现在我正在使用 simplexml_load_file,但这需要很长时间才能读取提要。今天我在stackoverflow上搜索并找到了XMLReader类。这有点快,但还不够快。

我的问题是,有没有一种更快的方法来读取多个始终唯一的 rss 提要,这样用户就不必等待这么长时间了。

【问题讨论】:

    标签: php rss


    【解决方案1】:

    查看simplePie - 该库非常易于使用,并且实现了运行良好的缓存。

    您可以做的另一件事是加快感知加载时间,即在没有提要内容的情况下加载页面,然后使用 AJAX 管道输入提要。如果您将加载器动画图像粘贴在提要所在的内容区域并在页面加载时启动 AJAX 请求,用户会感觉到您的页面加载速度更快 - 即使提要采用相同的总数,它也会更快地可用加载时间。此外,那些不在场的用户可以开始做他们需要做的事情,而无需等待他们甚至不关心的内容。

    【讨论】:

    • 谢谢,但是这个阅读器还没有准备好 PHP 5 :( 我看到它真的很快!
    【解决方案2】:

    为什么不在有用户请求时随机包含的文件中缓存 5 或 6 个提要。这样,用户就不会等待处理提要。缓存文件可以通过 cron 作业每 10 或 15 分钟刷新一次,因此总是有新鲜的内容。

    【讨论】:

    • 不可能,因为提要的 url 中有一个搜索词总是不同的。
    【解决方案3】:

    好的,我使用了不同的 rss 解析器,例如: - 简单派 - 最后RSS

    但最快的方法是使用 PHP XMLReader,因为您不必读取整个 xml 文件。

    【讨论】:

      【解决方案4】:

      我认为您需要做的不是阅读整个 RSS Feed 并对其进行解析,而是仅获取其中的一部分。如果你使用file_get_contents(),你可以设置一个限制,不下载整个页面,而只下载第一部分。

      当然,您的 RSS 提要已损坏。我现在不知道你的读者对此有何反应。也许您可以让他忽略它或修复损坏的提要端。

      给你:

      $feed = file_get_contents('http://stackoverflow.com/...', false, null, -1, 1000);
      $end = strpos($feed, '</entry>', -1);
      echo substr($feed, 0, $end). '</entry></feed>';
      

      【讨论】:

      • file_get_contents 可能是读取数据的最佳方式,但您建议只读取文档的一部分并不是一个好的建议。开发人员如何知道要获取多少文档,这样他就不会在中间截断文章,甚至不截断中间的标签?那么您得到了一个无法正确解析的无效 XML 文档。另外,拼写检查会不会很痛苦?
      • 是的,这很糟糕,但我是一个非常简单的方法去这里。这就是为什么我说你必须修复损坏的提要。您丢失了一个提要条目,那又如何?
      • 当然你可以使用 fopen/fread 并自己解析提要,但这是更多的工作。
      • 您怎么知道您“丢失了一个提要条目”?如果你只是在file_get_contents 处抛出一些任意的max_len 参数,你不知道你会得到什么。可能是除最后一篇文章外的所有内容,可能是第一篇文章的 1/3。您也没有简单的方法来“修复损坏的提要”,因为您不知道自己剪掉了什么。与刚刚检索整个提要相比,您将花费更多的执行时间来试图找出需要“修复”和有效的损坏 XML 的混乱。你最好不要一开始就破坏它。 -1
      • 感谢指正!修复损坏的 XML 非常容易。只需搜索最后一个条目的结尾和其余部分的剪切(见上文)。
      猜你喜欢
      • 2014-05-12
      • 1970-01-01
      • 2012-05-11
      • 2010-10-04
      • 2012-07-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多