【问题标题】:Node.js optimizing module for best performanceNode.js 优化模块以获得最佳性能
【发布时间】:2016-09-23 14:34:41
【问题描述】:

我正在编写一个爬虫模块,它递归地调用它来下载越来越多的链接,具体取决于传递的depth 选项参数。

除此之外,我正在对已下载的返回资源执行更多任务(根据传递给爬虫的配置来丰富/更改它)。
此过程会递归进行,直到完成,这可能需要很长时间(或不需要),具体取决于所使用的配置。

我希望尽可能快地优化它,并且不妨碍任何将使用它的 Node.js 应用程序。
我已经设置了一个快速服务器,它的一个路由启动爬虫用户定义的(查询字符串)主机。
在为不同的主机启动了几个爬取会话后,我注意到有时我会从只返回简单文本的其他路由获得真正缓慢的响应。
延迟可能从几毫秒到 30 毫秒不等秒,它似乎是在随机时间发生的(好吧,没有什么是随机的,但我无法查明原因)。
我已经阅读了 Jetbrains 的 article 关于使用集成的 V8 分析器功能进行 CPU 分析的文章Webstorm,但不幸的是它只显示了如何收集信息以及如何查看它,但它没有给我任何关于如何找到此类问题的提示,所以我几乎被困在这里。

任何人都可以帮助我解决这个问题并指导我,任何可能阻碍我的爬虫可能执行的快速服务器的提示(大量递归调用),或者如何找到我正在寻找和优化的那些热点他们?

【问题讨论】:

    标签: node.js performance express web-crawler


    【解决方案1】:

    对于如何优化未显示的代码,很难说更具体的内容,但我可以提供一些与所描述情况相关的建议。

    想到的一件事是您可能正在运行一些阻塞代码。如果不使用setTimeoutprocess.nextTick 将其分解并让事件循环有机会偶尔运行一次,切勿使用深度递归。

    【讨论】:

    • 我想有人会这么说,但这个问题对于我的代码来说真的很具体,并且无法帮助其他可能偶然发现这个问题的人。如果您对我可以在哪里提出这样的问题并且更具体地提供我的代码有任何想法,那就太好了,但它在 stackoverflow 中并不实用,因为它不仅仅是一个或两个文件模块,而且我不想告诉人们这里的代码看看它并告诉我它有什么问题。
    • 我还想我应该使用计时器让事件循环有机会运行,但我不知道要针对哪些代码片段将它们包装在计时器中。
    • @Jorayen 这个existing stackoverflow question 可能会回答一两件事。
    • @Gimby 感谢分享。所有这一切我已经知道了,我知道我不应该通过使用计时器来阻止事件循环(不知道在我的爬虫中确切地包装什么以提供最佳性能,通常我知道高 CPU 密集型任务,但在我的爬虫无论如何在嵌套循环中有很多计算,所以这是否意味着我应该包装所有东西?不能说。),我还使用任何正在使用的 I/O 函数的异步版本,我使用异步作为一个控制流库。
    • @Jorayen “我不知道要定位哪些代码段” - 甚至没有看到你所说的一段代码,我只能说:定位所有其中。 :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-07
    • 2022-01-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-14
    相关资源
    最近更新 更多