[NodeJS] Node.js 與 V8 的故事


要說Node.js的歷史,就不得不說說V8歷史。在此之前我們先一句話描述一下什么是Node.js:Node.js是一個基於Google Chrome V8 Javascript引擎之上的平台,用以創建輕量級、快速、可擴展、事件驅動和非阻塞I/O的應用。現在我們來說說Node.js的源頭——V8 javascript引擎。

 

V8是Google主導的一個開源項目,它是Chrome瀏覽器的核心。它首次公開發布是在2008年9月2日,這天也是Chrome瀏覽器的首個版本發布。它是瀏覽器性能的一次飛躍,它將瀏覽器技術推向了一個全新的高度。它使用C++寫成,它革命性的創舉是將Javascript源碼預編譯為機器碼,而不是像以前那樣將Javascript翻譯為字節碼,然后在運行時使用JIT動態執行代碼。

 

2009年左右,Ryan Dahl正努力解決一個棘手的問題——讓瀏覽器知道完成剩余的上傳進度所需要的時間。受到Ruby的Mongrel webserver和剛剛發布的Chrome和V8的啟發,他決定試試javascript,很快這個小想法變成了Node.js。

 

Node.js項目開發得到Joyent資助,這也是Ryan工作的公司。今天他仍然在這家公司工作,但在2012年1月30日他將守護者的位置轉交給了Issac Schlueter。

 

如果你想了解更多詳情關於Ryan Dahl和他如何以及為什么決定發明Node.js,點擊查看他本人的相關自述視頻

 

一直以來,Javascript所處的瀏覽器環境被限制為單進程/單線程,這使得它不能同時更新DOM和執行其他業務邏輯,V8也是如此。那么,為什么還有人會想要在服務器端使用如此受限和低性能的東西?

 

Javascript也許不是計算能力最好的語言,但是它事件驅動的非阻塞設計,讓Node.js成為一個輕量級(在RaspberryPI運行毫無壓力)且性能良好的web平台,變成老的JEE Java平台、PHP和Ruby的直接競爭對象。

 

從開發者的角度看,Node.js社區的創新數量令人稱奇,其中作為Node.js開發者必須知道的三大工具之一的NPM貢獻良多,但這就是另外一個故事了。

 

Node.js由Ryan Dahl在2009年進行研發,它的發展和維護得到Joyent公司資助。Dahl在看到Flickr的上傳文件進度條時萌發了研發Node.js的想法。由於瀏覽器不知道已經上傳了多少文件,所以不得不向服務器發起請求查詢。Dahl想到了一個更簡單的方法。Ruby的Mongrel web server是Dahl的一個靈感來源。

Node.js受到其他一些模式的影響,例如Ruby On Rails的Event Machine,Python的Twisted。在這些模式基礎之上,Node.js提供的事件循環(event loop)使之不再像先前那些模式一樣只是一個類庫,而成為一種語言。與傳統使用阻塞調用的模式不同,Node.js沒有循環事件所使用的調用,而是本身執行完腳本直接進入循環。這也是javascript的運行方式。

最初Dahl經歷了幾個失敗的項目,這幾個項目分別由C、Lua和Haskell寫成的,但當谷歌發布V8引擎后,Dahl開始嘗試Javascript。

盡管他最初的想法是非阻塞,但是他在模塊系統和一些其他地方並沒有遵循非阻塞,因為非阻塞導致加載外部類庫時有問題。


Node.js由Dahl在2011年發布,但只能在Linux運行。npm作為Node.js的包管理工具在同年發布。

在2011年6月,微軟與Joyent合作幫助開發了原生的Windows版本的Node.js。同年7月,第一個Windows版本Node.js發布。


2012年1月30日,Dahl將守護者位置讓給他的同事,也是npm創始人Issac Schlueter。Dahl在Google groups中寫道:

  “現在,基於libuv的重寫工作已大部分完成,我將把我的守護者位置讓與Issac Schlueter。在接下來的數月里,我們的精力將轉移到關於第三方模塊系統體驗(其中包括一個查閱所有第三方模塊的網站),一個新的插件構建系統,在npm增加二進制安裝包。Issac將擔任維系內核與外部模塊關系並使之具有良好體驗的角色,也是唯一具有這種維系能力的角色。經過三年對Node的開發,這使我可以空出來做一些項目研究工作。我仍然為Joyent工作,並從旁提供建議,但我不再進行日復一日的Bug修復工作。Issac具有讓Node發布新版本的話語權。他將直接負責新特性訴求、更改和bug修復。”

2014年1月15日,Schlueter宣布他將把npm作為他的工作重心,Timothy J Fontaine將成為項目負責人。Issac在Node.js博客中寫道:
  “經過去年一年,TJ Fontaine已經變成Node.js項目的絕對核心。他一直從事構建新版本,管理測試工作,修復煩人的bug,始終關注使用者的需求並作出最后決定。……任何接觸到項目的核心工作的人都知道他已經作為事實上負責項目有一段時間了,因此我們決定將它變成正式的。這個決定即時生效,TJ Fontaine成為Node.js項目負責人。我將仍是Node.js的核心開發者,並期待繼續以這個角色為項目作出自己的貢獻。無論如何,我工作重心將是npm。”

第二天,2014年1月16日,Timothy J Fontaine回帖簡要說明了以后的發展道路,還有bug修復,性能平衡,與V8引擎保持同步更新以及工具。

 

Ref:

NODE.JS AND V8 HISTORY

Wiki Node.js

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM