我目前正在 Symfony2 框架中开发一个网站,并且我编写了一个每 5 分钟运行一次的命令,它需要读取大量的 RSS 新闻提要,从中获取新项目并将它们放入我们的数据库中。
现在,该命令需要大约 45 秒才能运行,在这 45 秒内,它还需要大约 50% 到 90% 的 CPU,尽管我已经对其进行了很多优化。
所以我的问题是,用其他东西(例如 python)重写相同的命令是个好主意吗?可用于 python 的 RSS/Atom 库是否比可用于 PHP 的库更快、更优化?
在此先感谢,雅普
您可以使用 lxml 解析原始 XML,其中用户是 libxml C iibrary 的基础:
因为解析是使用本机代码完成的,所以速度很快。
有人已经在做:
另一方面,如果瓶颈不是 XML 解析,而是下载数据并对其进行整理,那么瓶颈就在其他地方。
通过在每次提要迭代结束时添加一个 usleep() 函数来解决这个问题。这大大降低了 CPU 和内存消耗。过去这个过程大约需要 20 分钟,现在只需要大约 5 分钟!
您可以尝试在解析它们之前先检查提要的缓存标头。
通过这种方式,您可以节省可能大量提要的昂贵的解析操作。
在您的数据库中为源存储一个 last_updated 日期,然后检查可能的缓存标头。有几个,所以看看什么最适合或服务最多或检查所有。
标头可以是:
但请注意:您必须信任您的提要来源。
并非每个提要都提供此类标题或正确提供它们。
但我相信他们中的很多人都这样做。