要說Node.js的歷史,就不得不說說V8歷史。在此以前咱們先一句話描述一下什麼是Node.js:Node.js是一個基於Google Chrome V8 Javascript引擎之上的平臺,用以建立輕量級、快速、可擴展、事件驅動和非阻塞I/O的應用。如今咱們來講說Node.js的源頭——V8 javascript引擎。javascript
V8是Google主導的一個開源項目,它是Chrome瀏覽器的核心。它首次公開發布是在2008年9月2日,這天也是Chrome瀏覽器的首個版本發佈。它是瀏覽器性能的一次飛躍,它將瀏覽器技術推向了一個全新的高度。它使用C++寫成,它革命性的創舉是將Javascript源碼預編譯爲機器碼,而不是像之前那樣將Javascript翻譯爲字節碼,而後在運行時使用JIT動態執行代碼。java
2009年左右,Ryan Dahl正努力解決一個棘手的問題——讓瀏覽器知道完成剩餘的上傳進度所須要的時間。受到Ruby的Mongrel webserver和剛剛發佈的Chrome和V8的啓發,他決定試試javascript,很快這個小想法變成了Node.js。node
Node.js項目開發獲得Joyent資助,這也是Ryan工做的公司。今天他仍然在這家公司工做,但在2012年1月30日他將守護者的位置轉交給了Issac Schlueter。web
若是你想了解更多詳情關於Ryan Dahl和他如何以及爲何決定發明Node.js,點擊查看他本人的相關自述視頻。npm
一直以來,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:oop