c# - node.js 与 C# 中的网络爬虫性能

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

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

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

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

最佳答案

我认为您的应用程序的瓶颈在网络(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 上写了一些简单的网络爬虫,绝对会推荐你试一试。

关于c# - node.js 与 C# 中的网络爬虫性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17392565/

相关文章:

java - 过时的 Java 优化技巧

c# - 组合框的值应显示在文本框中

c# - 在 asp.net 中使用默认属性创建剑道网格

c# - 如何向 HttpClient.GetAsync 返回的任务添加更多详细信息

c# - 如何将 DistinctRootEntityResultTransformer 应用于 NHibernate 中的所有查询

java - Java 中的低音增强

sql-server - SQL : How to improve performance for INNER JOIN with CASE

javascript - 当未处理的 promise 拒绝错误时,nodejs 不断加载

node.js - 将样式/类添加到 react-datepicker

javascript - 期望对象具有所有给定的属性