官术网_书友最值得收藏!

1.2 Node的命名與起源

在Node的官方網站(http://nodejs.org)之外,Node具有很多別稱:Nodejs、NodeJS、Node.js等。本書在寫作過程中遵循官方的說法,將會一直使用Node這個名字,但是在當前語境之外,為了與其余表示節點的技術或名詞相區別,均可以帶上.js表明它是Node。在聽到這些詞匯時,應該意識到,它們說的是一碼事。除了本書的封面和此處會用到Node.js外,其余地方都會以Node作為正式稱謂。

Node名字的來由,其實跟它的起源是有密切關系的。

1.2.1 為什么是JavaScript

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的虛擬機由于性能不好而落選。

相比之下,JavaScript比C的開發門檻要低,比Lua的歷史包袱要少。盡管服務器端JavaScript存在已經很多年了,但是后端部分一直沒有市場,可以說歷史包袱為零,為其導入非阻塞I/O庫沒有額外阻力。另外,JavaScript在瀏覽器中有廣泛的事件驅動方面的應用,暗合Ryan Dahl喜好基于事件驅動的需求。當時,第二次瀏覽器大戰也漸漸分出高下,Chrome瀏覽器的JavaScript引擎V8摘得性能第一的桂冠,而且其基于新BSD許可證發布,自然受到Ryan Dahl的歡迎。考慮到高性能、符合事件驅動、沒有歷史包袱這3個主要原因,JavaScript成為了Node的實現語言。

1.2.2 為什么叫Node

起初,Ryan Dahl稱他的項目為web.js,就是一個Web服務器,但是項目的發展超過了他最初單純開發一個Web服務器的想法,變成了構建網絡應用的一個基礎框架,這樣可以在它的基礎上構建更多的東西,諸如服務器、客戶端、命令行工具等。Node發展為一個強制不共享任何資源的單線程、單進程系統,包含十分適宜網絡的庫,為構建大型分布式應用程序提供基礎設施,其目標也是成為一個構建快速、可伸縮的網絡應用平臺。它自身非常簡單,通過通信協議來組織許多Node,非常容易通過擴展來達成構建大型網絡應用的目的。每一個Node進程都構成這個網絡應用中的一個節點,這是它名字所含意義的真諦。

主站蜘蛛池模板: 嘉兴市| 改则县| 古交市| 绍兴市| 尤溪县| 福安市| 桦川县| 台安县| 马鞍山市| 克拉玛依市| 安阳县| 南汇区| 环江| 合阳县| 开封市| 罗定市| 石棉县| 华坪县| 合水县| 中宁县| 三明市| 扶风县| 桃源县| 岳普湖县| 图片| 渝中区| 青河县| 通州市| 安仁县| 彰化市| 高雄市| 黎平县| 鞍山市| 清徐县| 来凤县| 鄂伦春自治旗| 远安县| 涞水县| 齐河县| 华安县| 贵德县|