我正在开展一个项目,我正在为一个页面获取一个URL并找到一个代表该页面的图像。查看元数据后,我查看页面内容并开始抓取页面。这是一个PHP项目。
使用PHP,getimagesize()函数有一个很长的超时时间,如果页面上有很多图像,那么它就会变得很慢。
我选择的解决方案有点奇怪,但非常快。我希望看看是否有更好的解决方案,或者我的解决方案是否有任何明显的问题。
---开始解决方案---
在PHP中,构建一个图像URL数组。连接到由Node.js处理的套接字,并将URL数组传递给Node.js处理程序。同时,在PHP端进行阻塞读取,等待响应。
在Node.js中,我使用'imagesize'模块从URL获取图像的图像大小/类型。完成所有作业后,将最大图像的URL写入套接字。在关闭套接字之前,任何错误也会写入套接字。这是一个带有'forever'模块的守护进程。
PHP端从套接字读取后解除阻塞。
---结束解决方案---
这是解决此问题的可接受方式吗?它起作用,在一些形式不佳的blogspot页面上,我看到了10倍的性能提升。我知道PHP中有一些线程解决方案,但我担心某些页面的线程数量很多。
更新
要求是提供即时反馈,因此cron作业或队列不符合要求。
答案 0 :(得分:0)
如果您看到性能改进,那么解决您的问题是可以接受的。我建议尝试使用shell_exec函数来运行node.js进程。您可以将url作为命令行参数传递,您可以使用process.argv
访问这些参数,这样您就不需要让node.js进程始终运行。仅在需要时通过php运行它。