2013-06-30 114 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上寫了幾個簡單的網絡爬蟲,肯定會推薦你試試看。