Node.js 是一種將 JS 放在服務器端實現的平臺,而爲何要把js放到服務器端實現,JS 最初設計是在瀏覽器端解釋執行,後來爲何搞Node.js 把他放在服務器端執行呢?程序員
關於這個問題,近日有網友解釋道:後端
Node.js 的做者 Ryan Dahl 是一名資深的 C/C++ 程序員,在創造出 Node 以前,他的主要工做都是圍繞高性能 Web 服務器進行的。經歷過一些嘗試和失敗以後,他找到了設計高性能,Web 服務器的幾個要點:事件驅動、非阻塞I/O。瀏覽器
Ryan Dahl 最初的目標是寫一個基於事件驅動、非阻塞 I/O的 Web 服務器,以達到更高的性能,提供 Apache 等服務器以外的選擇。他提到,大多數人不設計一種更簡單和更有效率的程序的主要緣由是他們用到了阻塞 I/O 的庫。寫做 Node 的時候,Ryan Dahl 曾經評估過 C、Lua、Haskell、Ruby 等語言做爲備選實現,結論爲:服務器
C 的開發門檻高,能夠預見不會有太多的開發者能將它用於平常的業務開發,因此捨棄它;性能
Ryan Dahl 以爲本身還不足夠玩轉Haskell,因此捨棄它;設計
Lua 自身已經含有不少阻塞 I/O 庫,爲其構建非阻塞 I/O 庫也不能改變人們繼續使用阻塞 I/O 庫的習慣,因此也捨棄它;事件
而 Ruby 的虛擬機因爲性能很差而落選。ip
相比之下,JavaScript 比 C 的開發門檻要低,比Lua的歷史包袱要少。儘管服務器端 JavaScript 存在已經不少年了,可是後端部分一直沒有市場,能夠說歷史包袱爲零,爲其導入非阻塞 I/O 庫沒有額外阻力。開發
另外,JavaScript 在瀏覽器中有普遍的事件驅動方面的應用,暗合 Ryan Dahl 喜愛基於事件驅動的需求。當時,第二次瀏覽器大戰也漸漸分出高下,Chrome 瀏覽器的 JavaScript 引擎 V8 摘得性能第一的桂冠,並且其基於新 BSD 許可證發佈,天然受到 Ryan Dahl 的歡迎。考慮到高性能、符合事件驅動、沒有歷史包袱這3個主要緣由,JavaScript 成爲了 Node 的實現語言。虛擬機