Node.js的誕生

  衆所周知,在Netscape設計出JavaScript後的短短幾個月,JavaScript事實上已經是前端開發的唯一標準。

  後來,微軟通過IE擊敗了Netscape後一統桌面,結果幾年時間,瀏覽器毫無進步。(2001年推出的古老的IE 6到今天仍然有人在使用!)

  沒有競爭就沒有發展。微軟認爲IE6瀏覽器已經非常完善,幾乎沒有可改進之處,然後解散了IE6開發團隊!而Google卻認爲支持現代Web應用的新一代瀏覽器纔剛剛起步,尤其是瀏覽器負責運行JavaScript的引擎性能還可提升10倍。

  先是Mozilla藉助已壯烈犧牲的Netscape遺產在2002年推出了Firefox瀏覽器,緊接着Apple於2003年在開源的KHTML瀏覽器的基礎上推出了WebKit內核的Safari瀏覽器,不過僅限於Mac平臺。

  隨後,Google也開始創建自家的瀏覽器。他們也看中了WebKit內核,於是基於WebKit內核推出了Chrome瀏覽器。

  Chrome瀏覽器是跨Windows和Mac平臺的,並且,Google認爲要運行現代Web應用,瀏覽器必須有一個性能非常強勁的JavaScript引擎,於是Google自己開發了一個高性能JavaScript引擎,名字叫V8,以BSD許可證開源。

  現代瀏覽器大戰讓微軟的IE瀏覽器遠遠地落後了,因爲他們解散了最有經驗、戰鬥力最強的瀏覽器團隊!回過頭再追趕卻發現,支持HTML5的WebKit已經成爲手機端的標準了,IE瀏覽器從此與主流移動端設備絕緣。

Netscape設計出JavaScript語言
微軟的IE擊敗Netscape,統一天下
Firefox瀏覽器橫空出世
Safari瀏覽器不甘示弱
谷歌推出Chrome瀏覽器
谷歌開發出高性能JavaScript引擎V8
IE故步自封跟不上世界潮流

瀏覽器大戰和Node有何關係?
  話說有個叫Ryan Dahl的歪果仁,他的工作是用C/C++寫高性能Web服務。對於高性能,異步IO、事件驅動是基本原則,但是用C/C++寫就太痛苦了。於是這位仁兄開始設想用高級語言開發Web服務。他評估了很多種高級語言,發現很多語言雖然同時提供了同步IO和異步IO,但是開發人員一旦用了同步IO,他們就再也懶得寫異步IO了,所以,最終,Ryan瞄向了JavaScript。

  因爲JavaScript是單線程執行,根本不能進行同步IO操作,所以,JavaScript的這一“缺陷”導致了它只能使用異步IO。

  選定了開發語言,還要有運行時引擎。這位仁兄曾考慮過自己寫一個,不過明智地放棄了,因爲V8就是開源的JavaScript引擎。讓Google投資去優化V8,咱只負責改造一下拿來用,還不用付錢,這個買賣很划算。

  於是在2009年,Ryan正式推出了基於JavaScript語言和V8引擎的開源Web服務器項目,命名爲Node.js。雖然名字很土,但是,Node第一次把JavaScript帶入到後端服務器開發,加上世界上已經有無數的JavaScript開發人員,所以Node一下子就火了起來。

在Node上運行的JavaScript相比其他後端開發語言有何優勢?
  最大的優勢是藉助JavaScript天生的事件驅動機制加V8高性能引擎,使編寫高性能Web服務輕而易舉。

  其次,JavaScript語言本身是完善的函數式語言,在前端開發時,開發人員往往寫得比較隨意,讓人感覺JavaScript就是個“玩具語言”。但是,在Node環境下,通過模塊化的JavaScript代碼,加上函數式編程,並且無需考慮瀏覽器兼容性問題,直接使用最新的ECMAScript 6標準,可以完全滿足工程上的需求。

io.js
  因爲Node.js是開源項目,雖然由社區推動,但幕後一直由Joyent公司資助。由於一羣開發者對Joyent公司的策略不滿,於2014年從Node.js項目fork出了io.js項目,決定單獨發展,但兩者實際上是兼容的。

  然而中國有句古話,叫做“分久必合,合久必分”。分家後沒多久,Joyent公司表示要和解,於是,io.js項目又決定迴歸Node.js。

  具體做法是將來io.js將首先添加新的特性,如果大家測試用得爽,就把新特性加入Node.js。io.js是“嚐鮮版”,而Node.js是線上穩定版,相當於Fedora Linux和RHEL的關係。
原文鏈接:https://www.jianshu.com/p/8934c4edcdb2

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章