Node.js不是銀彈,但它仍然是顆子彈

fmms 12年前發布 | 7K 次閱讀 Node.js

        [本文英文原文鏈接:Node.js isn't a silver bullet, but it's still a bullet. ]

Node.js不是銀彈,但它仍然是顆子彈

本文的作者 Craig

        本文的作者 Craig 是一個住在紐約的自由軟件開發者,他在最近的看到了一篇名為《如果你正在使用 Node.js,你就是誤入歧途》的文章,文章對 Node.js 橫加指責,Craig 對此表示不滿,于是寫下了下面的文章:

        我真的不知道為什么有人這樣的討厭 Node.js。你也看見了網上有大量關于 Node.js 的文章和高調的言論,就好象 Node.js 是解決所有問題的良方。不是的。就像現有的很多其它框架和語言一樣,它在某些事情上表現的很優良,而在其它事情上卻很差。

        Node.js,單從我的理解上講,它的設計目標是更好的通過網絡快速、實時的傳輸少量字節信息。服務器端事件處理,即時消息應用,實時游戲,以及協作工具,這都是可以使用它的很好的例子。拿 Trello 做個例子。Trello 是一個實時協作應用程序,使用 Socket.io 和 Node.js 來實現客戶端之間的實時事件傳播和狀態變換。你可以使用頻繁的探詢或用 ajax 長周期探詢來完成相同的事情,但這兩種方法在服務器端占用了不必要的 worker 線程,需要處理額外的請求。Node.js 從某方面講,本質上正是擅長做這類事情。它的異步事件處理為基礎的架構使得接收、處理、發送實時事件消息變得簡單,容易,而且非常有速度。

Node.js不是銀彈,但它仍然是顆子彈

        可同時,Node.js 不是、不是特別的擅長做計算。比如,如果你想做一個能返回斐波那契數列(Fibonacci)序列中第n個數的 API,用 Node.js 必然不是一個很好的選擇,為什么?所有的原因都在于,人們之所以要使用 Node.js 都是為了一個避免去等待什么事情。相比等待一個數據庫返回查詢結果,Node.js 的做法是觸發一個查詢動作,設置一個回調事件。這樣,當查詢在執行時,你的程序可以去做其它事情(比如處理其它請求)。這使得 Node.js 看起來非常的快,通常不需要使用多個 CPU。然而,在我們的這個計算斐波那契數列的例子中,程序不需要去等待任何事情。這個 API 返回結果的速度直接依賴于計算的速度。所以,如果用另外一種計算能力更強的語言,比如 Haskell 或 Scala,更合適。

        所有的這些說明了什么觀點?觀點就是,如果一個框架只是為了解決任務A而設計,而你卻抱怨它不能很好的完成任務B,這是愚蠢而荒謬的。Node.js 在它被設計去做的事情上表現的異常優秀——所以,就不要去嚷嚷它不擅長做其它事情了。

來自: 外刊IT評論
 本文由用戶 fmms 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!