首先,我想從模塊為您娓娓道來Node。
JavaScript 自誕生以來,曾經沒有人拿它當作一門真正的編程語言,認為它不過是一種網頁小腳本而已,在Web1.0時代,這種腳本語言在網絡中主要有兩個作用:一個是表單校驗,另一個是網頁特效。另一方面,由于倉促被創造出來,它自身各種陷阱和缺點也被各種編程人員所詬病。直到Web2.0時代,前端工程師利用它大大的提升了網頁上的用戶體驗。在這個過程中,B/S應用展現出比C/S應用優越的地方。至此,JavaScript才被廣泛重視起來。
在Web2.0流行的過程中,各種前端庫和框架被開發出來,它們最初用于兼容各個版本的瀏覽器,隨后隨著更多的用戶需求在前端被實現,JavaScript也從表單校驗躍遷到應用開發的級別上。在這個過程中,它大致經歷了工具類庫、組件庫、前端框架、前端應用的變遷,如下圖所示:

經歷了長長的后天努力過程,JavaScript不斷被類聚和抽象,以更好的組織業務邏輯。從另一個角度而言,它也道出了JavaScript先天就缺失的一項功能:**模塊**。
在其它高級語言中,Java有類文件,Python有import機制,Ruby有require,PHP有include和require。而JavaScript通過 <script> 標簽引入代碼的方式顯得雜亂無章,語言自身毫無組織和約束能力。人們不得不用命名空間等方式人為的約束代碼,以求達到安全易用的目的。
但是看起來凌亂的JavaScript編程現狀并不代表著社區沒有進步,JavaScript的本地化編程之路一直在探索中。在Node出現之前,服務器端JavaScript基本沒有市場,與欣欣向榮的前端JavaScript應用相比,Rhino等后端JavaScript運行環境基本只是用于小工具,但是經歷十多年的發展后,社區也為JavaScript制定了相應的規范,其中CommonJS規范的提出算是最為重要的里程碑。
- 目錄
- 第1章 Node 簡介
- 1.1 Node 的誕生歷程
- 1.2 Node 的命名與起源
- 1.2.1 為什么是 JavaScript
- 1.2.2 為什么叫 Node
- 1.3 Node給JavaScript帶來的意義
- 1.4 Node 的特點
- 1.4.1 異步 I/O
- 1.4.2 事件與回調函數
- 1.4.3 單線程
- 1.4.4 跨平臺
- 1.5 Node 的應用場景
- 1.5.1 I/O 密集型
- 1.5.2 是否不擅長CPU密集型業務
- 1.5.3 與遺留系統和平共處
- 1.5.4 分布式應用
- 1.6 Node 的使用者
- 1.7 參考資源
- 第2章 模塊機制
- 2.1 CommonJS 規范
- 2.1.1 CommonJS 的出發點
- 2.1.2 CommonJS 的模塊規范
- 2.2 Node 的模塊實現
- 2.2.1 優先從緩存加載
- 2.2.2 路徑分析和文件定位
- 2.2.3 模塊編譯
- 2.3 核心模塊
- 2.3.1 JavaScript核心模塊的編譯過程
- 2.3.2 C/C++核心模塊的編譯過程
- 2.3.3 核心模塊的引入流程
- 2.3.4 編寫核心模塊
- 2.4 C/C++擴展模塊
- 2.4.1 前提條件
- 2.4.2 C/C++擴展模塊的編寫
- 2.4.3 C/C++擴展模塊的編譯
- 2.4.2 C/C++擴展模塊的加載
- 2.5 模塊調用棧
- 2.6 包與NPM
- 2.6.1 包結構
- 2.6.2 包描述文件與NPM
- 2.6.3 NPM常用功能
- 2.6.4 局域NPM
- 2.6.5 NPM潛在問題
- 2.7 前后端共用模塊
- 2.7.1 模塊的側重點
- 2.7.2 AMD規范
- 2.7.3 CMD規范
- 2.7.4 兼容多種模塊規范
- 2.8 總結
- 2.9 參考資源
- 第3章 異步I/O
- 3.1 為什么要異步I/O
- 3.1.1 用戶體驗
- 3.1.2 資源分配
- 3.2 異步I/O實現現狀
- 3.2.1 異步I/O與非阻塞I/O
- 3.2.2 理想的非阻塞異步I/O
- 3.2.3 現實的異步I/O
- 3.3 Node的異步I/O
- 3.3.1 事件循環
- 3.3.2 觀察者
- 3.3.3 請求對象
- 3.3.4 執行回調
- 3.3.5 小結
- 3.4 非I/O的異步API
- 3.4.1 定時器
- 3.5 事件驅動與高性能服務器