在node.js vs C#中的networking爬虫性能
我正在编写一个应用程序,爬过一长串链接, 下载页面 ,使用xpath查询searchhtml元素,并将检索到的一些信息存储在mysql数据库中 。 我使用multithreading解决scheme来获取大部分服务器,并消除延迟的影响。
我使用csharp和java编写了大部分应用程序,并使用asp.net/c#编写了我的Web应用程序。
我想问的是Node.js是否值得从性能angular度考虑? 因为吞吐量是最重要的因素。 Node.js更便携,跨平台是另一个原因,但性能对我来说更重要。
我认为你的应用程序的瓶颈是在networking上(HTTP或MySQL),而不是在代码上。
Node.js是单线程的,基于消息队列,所有“消息”完成后退出。 每个I / O都在线程池中等待(除非使用同步方法,这是不鼓励的)。
你的情况几件事情:
- 你没有对处理器/线程进行简单而完整的控制,但是你总是可以自己限制同时工作的数量
- 您不必担心并发,因为根本没有并发
- Node.js中的所有API都是精心devise的I / O,您只能编写20-50%的代码(按行)编写Web爬虫,而不是C#
- Node.js没有内置的XML库,你可以在NPM上find一些
- JavaScript是一种解释型语言,代码比C#慢。 但是由于你的I / O更多,我认为它不应该让你变得太慢
- 在Node.js上debuggingJavaScript是很痛苦的,但是networking抓取也不应该很复杂
我已经在Node.js上写了几个简单的networking爬虫,并且肯定会推荐你试试看。
- 具有Node.js和WPF客户端的Web应用程序是否可行?
- 在NodeJS插件中将args转换为double
- 将string参数从node.js传递给C ++代码(使用SWIG)
- 节点FFI包装函数在同步使用时失败,但asynchronous工作
- Express(NodeJS)无法处理从Xamarin Android应用程序发布
- 有没有办法找出哪些环境variables是需要/使用的可执行文件?
- node.js内部:如何找出'process.binding('eval')`被定义的位置?
- C ++ Node.js – 得到错误LNK 2001
- 使用node-gyp构build时无法加载node.js本机插件,但在使用Visual Studio构build时可以使用