我正在编写一个爬虫模块,它会递归地调用它 - 根据传递的depth
选项参数下载越来越多的链接。
除此之外,我在我下载的返回资源上做了更多任务(根据传递给爬虫的配置来丰富/更改它)。
这个过程是递归进行的,直到它完成,这可能需要花费很多时间(或不是),具体取决于所使用的配置。
我希望尽可能快地优化它,而不是阻碍任何将使用它的Node.js应用程序。
我已经设置了一个快速服务器,其中一条路由启动了爬虫用户定义的(查询字符串)主机。
在为不同的主机启动一些爬行会话之后,我注意到我有时可以从其他仅返回简单文本的路径获得真正的慢响应。
延迟可以是从几毫秒到某事的任何地方像30秒一样,它似乎是在随机时间发生的(没有什么是随机的,但我无法查明原因)。
我已经阅读了article Jetbrains关于使用V8分析器的CPU分析与Webstorm集成的功能,但不幸的是它只显示了如何收集信息以及如何查看它,但它没有给我任何关于如何找到这些问题的提示,所以我几乎被困在这里。 / p>
任何人都可以帮我解决这个问题并指导我,关于什么可能阻碍我的抓取工具可能做的快速服务器的任何提示(很多递归调用),或者可能如何找到我正在寻找和优化的那些热点它们?
答案 0 :(得分:0)
很难说明如何优化未显示的代码更具体,但我可以提供一些与所述情况相关的建议。
我想到的一件事是您可能正在运行一些阻止代码。切勿在不使用setTimeout
或process.nextTick
进行分解的情况下使用深度递归,并为事件循环提供偶尔运行一次的机会。