深入淺出Node.js【國內(nèi)第一本深入講解Node的圖書】
定 價:69 元
叢書名:圖靈原創(chuàng)
- 作者:樸靈 著
- 出版時間:2013/12/1
- ISBN:9787115335500
- 出 版 社:人民郵電出版社
- 中圖法分類:TP312JA
- 頁碼:348
- 紙張:膠版紙
- 版次:1
- 開本:16開
本書從不同的視角介紹了 Node 內(nèi)在的特點和結(jié)構(gòu)。由首章Node 介紹為索引,涉及Node的各個方面,主要內(nèi)容包含模塊機制的揭示、異步I/O 實現(xiàn)原理的展現(xiàn)、異步編程的探討、內(nèi)存控制的介紹、二進制數(shù)據(jù)Buffer的細節(jié)、Node 中的網(wǎng)絡(luò)編程基礎(chǔ)、Node 中的Web 開發(fā)、進程間的消息傳遞、Node 測試以及通過Node構(gòu)建產(chǎn)品需要的注意事項。最后的附錄介紹了Node 的安裝、調(diào)試、編碼規(guī)范和NPM 倉庫等事宜。
本書適合想深入了解 Node 的人員閱讀。
第一本深度講解Node的圖書源碼級別探尋過Node的實現(xiàn)原理阿里巴巴一線Node開發(fā)者最真實的經(jīng)驗
樸靈
真名田永強,文藝型碼農(nóng),就職于阿里巴巴數(shù)據(jù)平臺,資深工程師,Node.js布道者,寫了多篇文章介紹Node.js的細節(jié)。活躍于CNode社區(qū),是線下會議NodeParty的組織者和JSConfChina(滬JS和京JS)的組織者之一。熱愛開源,多個Node.js模塊的作者。叩首問路,碼夢為生。
第1章 Node簡介 1
1.1 Node的誕生歷程 1
1.2 Node的命名與起源 1
1.2.1 為什么是JavaScript 2
1.2.2 為什么叫Node 2
1.3 Node給JavaScript帶來的意義 2
1.4 Node的特點 4
1.4.1 異步I/O 4
1.4.2 事件與回調(diào)函數(shù) 6
1.4.3 單線程 7
1.4.4 跨平臺 7
1.5 Node的應(yīng)用場景 8
1.5.1 I/O密集型 8
1.5.2 是否不擅長CPU密集型業(yè)務(wù) 8
1.5.3 與遺留系統(tǒng)和平共處 10
第1章 Node簡介 1
1.1 Node的誕生歷程 1
1.2 Node的命名與起源 1
1.2.1 為什么是JavaScript 2
1.2.2 為什么叫Node 2
1.3 Node給JavaScript帶來的意義 2
1.4 Node的特點 4
1.4.1 異步I/O 4
1.4.2 事件與回調(diào)函數(shù) 6
1.4.3 單線程 7
1.4.4 跨平臺 7
1.5 Node的應(yīng)用場景 8
1.5.1 I/O密集型 8
1.5.2 是否不擅長CPU密集型業(yè)務(wù) 8
1.5.3 與遺留系統(tǒng)和平共處 10
1.5.4 分布式應(yīng)用 10
1.6 Node的使用者 10
1.7 參考資源 11
第2章 模塊機制 12
2.1 CommonJS規(guī)范 13
2.1.1 CommonJS的出發(fā)點 13
2.1.2 CommonJS的模塊規(guī)范 14
2.2 Node的模塊實現(xiàn) 15
2.2.1 優(yōu)先從緩存加載 16
2.2.2 路徑分析和文件定位 16
2.2.3 模塊編譯 18
2.3 核心模塊 20
2.3.1 JavaScript核心模塊的編譯過程 21
2.3.2 C/C++核心模塊的編譯過程 22
2.3.3 核心模塊的引入流程 25
2.3.4 編寫核心模塊 25
2.4 C/C++擴展模塊 27
2.4.1 前提條件 28
2.4.2 C/C++擴展模塊的編寫 29
2.4.3 C/C++擴展模塊的編譯 30
2.4.4 C/C++擴展模塊的加載 31
2.5 模塊調(diào)用! 32
2.6 包與NPM 33
2.6.1 包結(jié)構(gòu) 34
2.6.2 包描述文件與NPM 34
2.6.3 NPM常用功能 37
2.6.4 局域NPM 42
2.6.5 NPM潛在問題 43
2.7 前后端共用模塊 44
2.7.1 模塊的側(cè)重點 44
2.7.2 AMD規(guī)范 44
2.7.3 CMD規(guī)范 45
2.7.4 兼容多種模塊規(guī)范 45
2.8 總結(jié) 46
2.9 參考資源 46
第3章 異步I/O 47
3.1 為什么要異步I/O 47
3.1.1 用戶體驗 48
3.1.2 資源分配 49
3.2 異步I/O實現(xiàn)現(xiàn)狀 50
3.2.1 異步I/O與非阻塞I/O 50
3.2.2 理想的非阻塞異步I/O 54
3.2.3 現(xiàn)實的異步I/O 54
3.3 Node的異步I/O 56
3.3.1 事件循環(huán) 56
3.3.2 觀察者 56
3.3.3 請求對象 57
3.3.4 執(zhí)行回調(diào) 59
3.3.5 小結(jié) 60
3.4 非I/O的異步API 60
3.4.1 定時器 60
3.4.2 process.nextTick() 61
3.4.3 setImmediate() 62
3.5 事件驅(qū)動與高性能服務(wù)器 63
3.6 總結(jié) 65
3.7 參考資源 65
第4章 異步編程 66
4.1 函數(shù)式編程 66
4.1.1 高階函數(shù) 66
4.1.2 偏函數(shù)用法 67
4.2 異步編程的優(yōu)勢與難點 68
4.2.1 優(yōu)勢 69
4.2.2 難點 70
4.3 異步編程解決方案 74
4.3.1 事件發(fā)布/訂閱模式 74
4.3.2 Promise/Deferred模式 82
4.3.3 流程控制庫 93
4.4 異步并發(fā)控制 105
4.4.1 bagpipe的解決方案 105
4.4.2 async的解決方案 109
4.5 總結(jié) 110
4.6 參考資源 110
第5章 內(nèi)存控制 111
5.1 V8的垃圾回收機制與內(nèi)存限制 111
5.1.1 Node與V8 112
5.1.2 V8的內(nèi)存限制 112
5.1.3 V8的對象分配 112
5.1.4 V8的垃圾回收機制 113
5.1.5 查看垃圾回收日志 119
5.2 高效使用內(nèi)存 121
5.2.1 作用域 121
5.2.2 閉包 123
5.2.3 小結(jié) 124
5.3 內(nèi)存指標 124
5.3.1 查看內(nèi)存使用情況 124
5.3.2 堆外內(nèi)存 126
5.3.3 小結(jié) 127
5.4 內(nèi)存泄漏 127
5.4.1 慎將內(nèi)存當做緩存 127
5.4.2 關(guān)注隊列狀態(tài) 130
5.5 內(nèi)存泄漏排查 130
5.5.1 node-heapdump 131
5.5.2 node-memwatch 132
5.5.3 小結(jié) 135
5.6 大內(nèi)存應(yīng)用 135
5.7 總結(jié) 136
5.8 參考資源 136
第6章 理解Buffer 137
6.1 Buffer結(jié)構(gòu) 137
6.1.1 模塊結(jié)構(gòu) 137
6.1.2 Buffer對象 138
6.1.3 Buffer內(nèi)存分配 139
6.2 Buffer的轉(zhuǎn)換 141
6.2.1 字符串轉(zhuǎn)Buffer 141
6.2.2 Buffer轉(zhuǎn)字符串 142
6.2.3 Buffer不支持的編碼類型 142
6.3 Buffer的拼接 143
6.3.1 亂碼是如何產(chǎn)生的 144
6.3.2 setEncoding()與string_decoder() 144
6.3.3 正確拼接Buffer 145
6.4 Buffer與性能 146
6.5 總結(jié) 149
6.6 參考資源 149
第7章 網(wǎng)絡(luò)編程 150
7.1 構(gòu)建TCP服務(wù) 150
7.1.1 TCP 150
7.1.2 創(chuàng)建TCP服務(wù)器端 151
7.1.3 TCP服務(wù)的事件 153
7.2 構(gòu)建UDP服務(wù) 154
7.2.1 創(chuàng)建UDP套接字 154
7.2.2 創(chuàng)建UDP服務(wù)器端 154
7.2.3 創(chuàng)建UDP客戶端 155
7.2.4 UDP套接字事件 155
7.3 構(gòu)建HTTP服務(wù) 155
7.3.1 HTTP 156
7.3.2 http模塊 157
7.3.3 HTTP客戶端 161
7.4 構(gòu)建WebSocket服務(wù) 163
7.4.1 WebSocket握手 164
7.4.2 WebSocket數(shù)據(jù)傳輸 167
7.4.3 小結(jié) 169
7.5 網(wǎng)絡(luò)服務(wù)與安全 169
7.5.1 TLS/SSL 170
7.5.2 TLS服務(wù) 172
7.5.3 HTTPS服務(wù) 173
7.6 總結(jié) 175
7.7 參考資源 176
第8章 構(gòu)建Web應(yīng)用 177
8.1 基礎(chǔ)功能 177
8.1.1 請求方法 178
8.1.2 路徑解析 179
8.1.3 查詢字符串 180
8.1.4 Cookie 181
8.1.5 Session 184
8.1.6 緩存 190
8.1.7 Basic認證 193
8.2 數(shù)據(jù)上傳 195
8.2.1 表單數(shù)據(jù) 195
8.2.2 其他格式 196
8.2.3 附件上傳 197
8.2.4 數(shù)據(jù)上傳與安全 199
8.3 路由解析 201
8.3.1 文件路徑型 202
8.3.2 MVC 202
8.3.3 RESTful 207
8.4 中間件 210
8.4.1 異常處理 214
8.4.2 中間件與性能 215
8.4.3 小結(jié) 216
8.5 頁面渲染 217
8.5.1 內(nèi)容響應(yīng) 217
8.5.2 視圖渲染 219
8.5.3 模板 220
8.5.4 Bigpipe 231
8.6 總結(jié) 235
8.7 參考資源 235
第9章 玩轉(zhuǎn)進程 236
9.1 服務(wù)模型的變遷 236
9.1.1 石器時代:同步 236
9.1.2 青銅時代:復制進程 237
9.1.3 白銀時代:多線程 237
9.1.4 黃金時代:事件驅(qū)動 237
9.2 多進程架構(gòu) 238
9.2.1 創(chuàng)建子進程 239
9.2.2 進程間通信 240
9.2.3 句柄傳遞 242
9.2.4 小結(jié) 247
9.3 集群穩(wěn)定之路 248
9.3.1 進程事件 248
9.3.2 自動重啟 249
9.3.3 負載均衡 254
9.3.4 狀態(tài)共享 255
9.4 Cluster模塊 257
9.4.1 Cluster工作原理 258
9.4.2 Cluster事件 259
9.5 總結(jié) 259
9.6 參考資源 260
第10章 測試 261
10.1 單元測試 261
10.1.1 單元測試的意義 261
10.1.2 單元測試介紹 263
10.1.3 工程化與自動化 276
10.1.4 小結(jié) 277
10.2 性能測試 278
10.2.1 基準測試 278
10.2.2 壓力測試 280
10.2.3 基準測試驅(qū)動開發(fā) 281
10.2.4 測試數(shù)據(jù)與業(yè)務(wù)數(shù)據(jù)的轉(zhuǎn)換 283
10.3 總結(jié) 284
10.4 參考資源 284
第11章 產(chǎn)品化 285
11.1 項目工程化 285
11.1.1 目錄結(jié)構(gòu) 285
11.1.2 構(gòu)建工具 286
11.1.3 編碼規(guī)范 289
11.1.4 代碼審查 289
11.2 部署流程 290
11.2.1 部署環(huán)境 291
11.2.2 部署操作 291
11.3 性能 293
11.3.1 動靜分離 293
11.3.2 啟用緩存 294
11.3.3 多進程架構(gòu) 294
11.3.4 讀寫分離 295
11.4 日志 295
11.4.1 訪問日志 295
11.4.2 異常日志 296
11.4.3 日志與數(shù)據(jù)庫 299
11.4.4 分割日志 299
11.4.5 小結(jié) 299
11.5 監(jiān)控報警 299
11.5.1 監(jiān)控 300
11.5.2 報警的實現(xiàn) 302
11.5.3 監(jiān)控系統(tǒng)的穩(wěn)定性 303
11.6 穩(wěn)定性 303
11.7 異構(gòu)共存 304
11.8 總結(jié) 305
11.9 參考資源 305
附錄A 安裝Node 306
A.1 Windows系統(tǒng)下的Node安裝 306
A.2 Mac系統(tǒng)下Node的安裝 307
A.3 Linux系統(tǒng)下Node的安裝 308
A.4 總結(jié) 309
A.5 參考資源 309
附錄B 調(diào)試Node 310
B.1 Debugger 310
B.2 Node Inspector 311
B.2.1 安裝Node Inspector 312
B.2.2 錯誤堆! 312
B.3 總結(jié) 313
附錄C Node編碼規(guī)范 314
C.1 根源 314
C.2 編碼規(guī)范 315
C.2.1 空格與格式 315
C.2.2 命名規(guī)范 317
C.2.3 比較操作 318
C.2.4 字面量 318
C.2.5 作用域 318
C.2.6 數(shù)組與對象 319
C.2.7 異步 320
C.2.8 類與模塊 320
C.2.9 注解規(guī)范 321
C.3 最佳實踐 321
C.3.1 沖突的解決原則 321
C.3.2 給編輯器設(shè)置檢測工具 321
C.3.3 版本控制中的hook 322
C.3.4 持續(xù)集成 322
C.4 總結(jié) 322
C.5 參考資源 323
附錄D 搭建局域NPM倉庫 324
D.1 NPM倉庫的安裝 325
D.1.1 安裝Erlang和CouchDB 325
D.1.2 搭建NPM倉庫 326
D.2 高階應(yīng)用 328
D.2.1 鏡像倉庫 328
D.2.2 私有模塊應(yīng)用 328
D.2.3 純私有倉庫 329
D.3 總結(jié) 331
D.4 參考資源 332