【问题标题】:web crawling performance in node.js vs C#node.js 与 C# 中的网络爬取性能
【发布时间】:2013-06-30 16:40:22
【问题描述】:

我正在编写一个应用程序,它会爬取一长串链接、下载页面、使用 xpath 查询 搜索 html 元素并存储一些检索到 mysql 数据库中的信息。我使用多线程解决方案来充分利用我的服务器并消除延迟的影响。

我使用 csharp 和 java 编写大部分应用程序,而我使用 asp.net/c# 编写 Web 应用程序。

我想问的是,从性能的角度来看,Node.js 是否值得考虑?考虑到吞吐量是最重要的因素。 Node.js 更便携和跨平台是另一个原因,但性能对我来说更重要。

【问题讨论】:

  • 我最初的想法是,是的 - 节点对于这类任务值得考虑。节点的最大卖点是性能。它实际上是为处理并发而设计的——即使它是单线程的。我在 C# 中完成了多线程,这是一场噩梦。
  • 它使用使用线程池实现的call_back。我不确定它是单线程的。我认为它是多线程的,因为回调是由线程池执行的;你仍然不需要明确地使它并发。

标签: c# performance node.js web web-crawler


【解决方案1】:

我认为您的应用程序的瓶颈在于网络(HTTP 或 MySQL),而不是代码。

向上或向下,Node.js 是单线程的,基于消息队列,当所有“消息”完成时,它退出。每个 I/O 都在线程池上等待(除非您使用同步方法,不鼓励这样做)。

关于你的情况的几件事:

  • 您无法对处理器/线程进行简单而全面的控制,但您始终可以自己限制同时作业的数量
  • 您不必担心并发,因为根本没有并发
  • Node.js 中的所有 API 在设计时都考虑到了简化的 I/O,与 C# 相比,您可能只需要编写 20-50% 的代码(就行数而言)来编写网络爬虫
  • Node.js 没有内置 XML 库,你可以在 NPM 上找到一些
  • JavaScript 是一种解释型语言,代码比 C# 慢。但由于您更多地关注 I/O,我认为它不应该让您放慢太多
  • 在 Node.js 上调试 JavaScript 很痛苦,但网络爬虫也不应该很复杂

我已经在 Node.js 上编写了一些简单的网络爬虫,并且肯定会推荐您尝试一下。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-10-28
    • 1970-01-01
    • 2010-10-28
    • 1970-01-01
    • 2018-10-12
    • 1970-01-01
    • 2017-11-14
    • 1970-01-01
    相关资源
    最近更新 更多