2013-06-30 116 views
2

我正在写爬到的链接,下载页面一个长长的清单,使用XPath查询商店的一些检索到的信息的搜索HTML元素的应用程序mysql数据库。我使用多线程解决方案来获取大部分服务器并消除延迟的影响。网页抓取性能

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

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

+0

我最初的想法是肯定 - 节点值得考虑这类任务。节点的最大卖点是性能。它的设计真的是处理并发 - 即使它是单线程的。我在C#中完成了多线程,这是一场噩梦。 –

+0

它使用使用线程池实现的call_back。我不确定它是单线程的。我认为它是多线程的,因为回调是由线程池执行的;你仍然不需要明确地让它并发。 –

回答

0

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

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

在你的情况几件事情:

  • 您不必在处理器/线程简单而充满控制,但你总是可以限制同时工作的数自己
  • 您不必担心关于并发性因为根本没有并发性
  • Node.js中的所有API都是精心设计的I/O,您只能编写20-50%的代码(按行)编写Web爬虫,比在C#
  • Node.js没有内置的XML库,你可以找到几个o n NPM
  • JavaScript是一种解释型语言,代码比C#慢。但你的是更多的I/O,我想应该不是你慢下来太多
  • 调试JavaScript的Node.js的上是痛苦的,但网页爬行应该不是很复杂要么

我有在Node.js上写了几个简单的网络爬虫,肯定会推荐你试试看。