我正在编写一个爬虫模块,它递归地调用它自己,根据传递的depth选项参数下载越来越多的链接。
除此之外,我正在对我下载的返回资源执行更多任务(根据传递给爬虫的配置对其进行丰富/更改)。
这个过程会递归地进行,直到它完成为止,这可能需要很多时间(或者不需要),具体取决于所使用的配置。
我希望对它进行优化,使其尽可能快,并且不会阻碍任何使用它的Node.js应用程序。
我已经设置了一个express服务器,它的一个路由为用户定义的(查询字符串)主机启动爬虫。
在为不同的主机启动了几个爬虫会话后,我注意到,有时我可以从只返回简单文本的其他路由获得非常慢的响应。
延迟可能在几毫秒到30秒之间,而且似乎是随机发生的(好吧,没有什么是随机的,但我不能确定原因)。
我读过一篇Jetbrains的article,关于使用V8分析器功能进行CPU分析,该功能与Webstorm集成在一起,但不幸的是,它只显示了如何收集信息和如何查看信息,但它并没有给我任何关于如何发现此类问题的提示,所以我几乎被困在这里了。
有没有人可以帮我解决这个问题并指导我,有什么建议会阻碍我的爬虫可能做的快速服务器(许多递归调用),或者可能如何找到我正在寻找的热点并对其进行优化?
发布于 2016-09-23 22:44:58
关于如何优化未显示的代码,很难说出更具体的内容,但我可以给出一些与所描述的情况相关的建议。
我想到的一件事是,你可能正在运行一些阻塞代码。在不使用setTimeout或process.nextTick的情况下,不要使用深度递归来分解它,并让事件循环有机会偶尔运行一次。
https://stackoverflow.com/questions/39663413
复制相似问题