我目前正在Symfony2框架中开发一个网站,我编写了一个每5分钟运行一次的Command,需要读取一大堆RSS新闻源,从中获取新项目并将它们放入我们的数据库中。< / p>
现在该命令运行大约需要45秒,在这45秒内,它也需要大约50%到高达90%的CPU,即使我已经对它进行了大量优化。
所以我的问题是,用其他东西重写相同的命令是不是一个好主意,例如python?用于python的RSS / Atom库是否比PHP可用的更快,更优化?
提前致谢, 夏侯
答案 0 :(得分:2)
您可以使用lxml解析原始XML,这些用户基于libxml C iibrary:
因为解析是使用本机代码完成的,所以速度很快。
有人已经在做了:
Encoding error while parsing RSS with lxml
另一方面,如果瓶颈不是XML解析,而是下载数据并将其排序,那么瓶颈就在其他地方。
答案 1 :(得分:0)
您可以先尝试检查Feed的Cache-Headers,然后再解析它们 这样,您可以在很多Feed上保存昂贵的解析操作。
在数据库中为源代码存储last_updated日期,然后检查可能的缓存标头。有几个,所以看看什么最适合或服务最多或检查所有 标题可能是:
但要注意:你必须相信你的饲料来源 并非每个Feed都提供此类标题或正确提供它们 但我相信很多人都这样做。
答案 2 :(得分:0)
通过在feed的每次迭代结束时添加usleep()函数来解决这个问题。这大大降低了CPU和内存消耗。过程大约需要20分钟,现在只需要大约5分钟!