本書內容涵蓋了 Node.js高并發的原理、源碼分析以及使用 Node.js開發應用所需要的不同層面
的技術實踐。具體來講,本書包括 Node.js異步機制(配以源碼分析)、編輯與調試、測試技術、
Docker 部署、模塊機制、V8 引擎與代碼優化、Promise 和 ES6 Generator、LoopBack 開源框架、使
用 C 編寫擴展、JavaScript嚴格模式、編碼規范等內容。在 LoopBack 章節,本書詳細介紹了使
用此框架開發企業級 Web 應用的步驟,幫助讀者迅速掌握使用這個強大框架的訣竅。*后一章詳
細介紹了編寫不同類型的 C 模塊的知識,并對堆內存管理等內容做了深入探討。
本書適合所有前端和后端的開發人員閱讀。
一線Node開發者數年實戰經驗總結,適合所有前端和后端的開發人員閱讀本書內容涵蓋Node 高并發的原理、源碼分析以及使用 Node 開發應用所需要的不同層面的技術實踐。具體包括 Node 異步機制(配以源碼分析),編輯與調試,測試技術,Docker 部署,模塊機制,V8 引擎與代碼優化,Promise 和 ES6 generator ,LoopBack 開源框架,使用 C 編寫擴展,JavaScript 嚴格模式,編碼規范等內容。
尤嘉,東南大學計算機碩士,從事軟件研發工作多年,先后就職于奇虎和獵豹移動。做過基于 chromium 的瀏覽器,也從事過 WebKit 與 V8 方面的研發工作。目前從事 P2P 與區塊鏈方面的項目研發。
目 錄
第1章 Node異步編程范式 ·····························································1
1.1 同步與異步的比較 ········································································2
1.2 Node異步的實現 ···········································································7
1.2.1 HTTP請求完全異步的例子 ·························································8
1.2.2 本地磁盤I/O多線程模擬 ··························································17
1.3 事件驅動 ··················································································18
參考資料 ····························································································19
第2章 搭建自己的開發環境 ·························································21
2.1 Node的編譯與安裝 ······································································22
2.2 開發與調試 ···············································································23
2.3 單元測試 ··················································································29
2.3.1 Mocha 測試框架 ··········································································29
2.3.2 TDD 風格 ··················································································32
2.3.3 BDD 風格 ··················································································34
2.3.4 生成不同形式的測試報告 ······························································35
2.3.5 代碼覆蓋率工具Istanbul·································································36
參考資料 ····························································································40
第3章 使用Docker部署Node服務 ··················································43
3.1 Docker基礎 ···············································································44
3.2 在Docker中運行Node
··································································· 45
3.3 導出配置好的容器 ······································································
47
參考資料 ····························································································
48
第4章 Node模塊 ·······································································
49
4.1 程序入口 ··················································································
50
4.2 VM模塊 ···················································································
50
4.3 模塊加載與緩存 ·········································································
52
4.4 模塊分類 ··················································································
54
4.5 正確導出模塊 ············································································
55
4.6 小心使用全局變量 ······································································
56
第5章 V8引擎 ··········································································
57
5.1 Java Script代碼的編譯與優化 ·························································
58
5.1.1 即時編譯 ···················································································
58
5.1.2 隱藏類 ······················································································
59
5.1.3 內聯緩存 ···················································································
60
5.1.4 優化回退 ···················································································
61
5.1.5 寫出更具親和性的代碼 ·································································
62
5.1.6 借助TypeScript
············································································ 63
5.2 垃圾回收與內存控制 ···································································
65
5.2.1 V8的垃圾回收算法 ·······································································
65
5.2.2 使用Buffer
·················································································
67
5.2.3 避免內存泄漏 ·············································································
70
參考資料 ····························································································
77
V
第6章 Promise對象 ····································································
79
6.1 Promise的含義 ···········································································
80
6.2 基本用法 ··················································································
80
6.3 then的鏈式寫法 ··········································································
82
6.4 bluebird庫 ·················································································
85
參考資料 ····························································································
86
第7章 用ES6 Generator解決回調金字塔 ·········································
87
7.1 Node異步實現流程 ······································································
88
7.2 用Generator實現異步調用與多并發 ·················································
89
7.3 嚴格模式下運行 ·········································································
99
7.4 理解執行過程 ···········································································100
7.5 本章結語 ·················································································106
第8章 LoopBack開源框架 ··························································107
8.1 安裝與運行 ··············································································108
8.2 路由與權限控制 ········································································113
8.3 添加新模型 ··············································································121
8.4 初始化數據庫 ···········································································131
8.5 鉤子機制 ·················································································134
8.6 中間件 ····················································································137
8.7 模型關系 ·················································································139
8.8 使用cluster模式運行服務 ·····························································141
參考資料 ···························································································
144
第9章 編寫C 擴展 ·································································145
9.1 使用C 編寫擴展模塊 ································································146
9.1.1 導出對象 ··················································································
146
9.1.2 導出函數 ··················································································
149
9.1.3 導出構造函數 ············································································
151
9.2 線程模型與CPU密集型任務 ·························································164
9.3 線程對象 ·················································································164
9.4 本章結語 ·················································································170
參考資料 ···························································································
170
附 錄 ·····················································································171
附錄 A
JavaScript 嚴格模式 ·······························································172
附錄 B
JavaScript 編碼規范 ······························································182
參考資料 ···························································································
195