Node.js_PDF ~ 深入淺出 Node.js [PDF電子書&原始碼]
Node.js_PDF ~ 深入淺出 Node.js [PDF電子書&原始碼]
資料來源: https://www.tenlong.com.tw/products/9787115335500
目錄
第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事件與回調函數6
1.4.3單線程7
1.4.4跨平臺7
1.5 Node的應用場景8
1.5.1 I/O密集型8
1.5.2是否不擅長CPU密集型業務8
1.5.3與遺留系統和平共處10
1.5.4分佈式應用10
1.6 Node的使用者10
1.7參考資源11
第2章模塊機制12
2.1 CommonJS規範13
2.1.1 CommonJS的出發點13
2.1.2 CommonJS的模塊規範14
2.2 Node的模塊實現15
2.2.1優先從緩存加載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模塊調用棧32
2.6包與NPM 33
2.6.1包結構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模塊的側重點44
2.7.2 AMD規範44
2.7.3 CMD規範45
2.7.4兼容多種模塊規範45
2.8總結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實現現狀50
3.2.1異步I/O與非阻塞I/O 50
3.2.2理想的非阻塞異步I/O 54
3.2.3現實的異步I/O 54
3.3 Node的異步I/O 56
3.3.1事件循環56
3.3.2觀察者56
3.3 .3請求對象57
3.3.4執行回調59
3.3.5小結60
3.4非I/O的異步API 60
3.4.1定時器60
3.4.2 process.nextTick() 61
3.4.3 setImmediate() 62
3.5事件驅動與高性能服務器63
3.6總結65
3.7參考資源65
第4章異步編程66
4.1函數式編程66
4.1.1高階函數66
4.1.2偏函數用法67
4.2異步編程的優勢與難點68
4.2.1優勢69
4.2.2難點70
4.3異步編程解決方案74
4.3.1事件發布/訂閱模式74
4.3.2 Promise/Deferred模式82
4.3.3流程控制庫93
4.4異步並發控制105
4.4.1 bagpipe的解決方案105
4.4. 2 async的解決方案109
4.5總結110
4.6參考資源110
第5章內存控制111
5.1 V8的垃圾回收機制與內存限制111
5.1.1 Node與V8 112
5.1.2 V8的內存限制112
5.1.3 V8的對象分配112
5.1.4 V8的垃圾回收機制113
5.1.5查看垃圾回收日誌119
5.2高效使用內存121
5.2.1作用域121
5.2.2閉包123
5.2.3小結124
5.3內存指標124
5.3.1查看內存使用情況124
5.3.2堆外內存126
5.3.3小結127
5.4內存洩漏127
5.4.1慎將內存當做緩存127
5.4.2關註隊列狀態130
5.5內存洩漏排查130
5.5.1 node—heapdump 131
5.5.2 node—memwatch 132
5.5.3小結135
5.6大內存應用135
5.7總結136
5.8參考資源136
第6章理解Buffer 137
6.1 Buffer結構137
6.1.1模塊結構137
6.1.2 Buffer對象138
6.1.3 Buffer內存分配139
6.2 Buffer的轉換141
6.2.1字符串轉Buffer 141
6.2.2 Buffer轉字符串142
6.2.3 Buffer不支持的編碼類型142
6.3 Buffer的拼接143
6.3.1亂碼是如何產生的144
6.3.2 setEncoding( )與string_decoder() 144
6.3.3正確拼接Buffer 145
6.4 Buffer與性能146
6.5總結149
6.6參考資源149
第7章網絡編程150
7.1構建TCP服務150
7.1.1 TCP 150
7.1.2創建TCP服務器端151
7.1 .3 TCP服務的事件153
7.2構建UDP服務154
7.2.1創建UDP套接字154
7.2.2創建UDP服務器端154
7.2.3創建UDP客戶端155
7.2.4 UDP套接字事件155
7.3構建HTTP服務155
7.3.1 HTTP 156
7.3.2 http模塊157
7.3.3 HTTP客戶端161
7.4構建WebSocket服務163
7.4.1 WebSocket握手164
7.4.2 WebSocket數據傳輸167
7.4.3小結169
7.5網絡服務與安全169
7.5. 1 TLS/SSL 170
7.5.2 TLS服務172
7.5.3 HTTPS服務173
7.6總結175
7.7參考資源176
第8章構建Web應用177
8.1基礎功能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數據上傳195
8.2.1表單數據195
8.2.2其他格式196
8.2.3附件上傳197
8.2.4數據上傳與安全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小結216
8.5頁面渲染217
8.5.1內容響應217
8.5.2視圖渲染219
8.5.3模板220
8.5.4 Bigpipe 231
8.6總結235
8.7參考資源235
第9章玩轉進程236
9.1服務模型的變遷236
9.1.1石器時代:同步236
9.1.2青銅時代:複製進程237
9.1.3白銀時代:多線程237
9.1.4黃金時代:事件驅動237
9.2多進程架構238
9.2.1創建子進程239
9.2.2進程間通信240
9.2 .3句柄傳遞242
9.2.4小結247
9.3集群穩定之路248
9.3.1進程事件248
9.3.2自動重啟249
9.3.3負載均衡254
9.3.4狀態共享255
9.4 Cluster模塊257
9.4.1 Cluster工作原理258
9.4.2 Cluster事件259
9.5總結259
9.6參考資源260
第10章測試261
10.1單元測試261
10.1.1單元測試的意義261
10.1.2單元測試介紹263
10.1.3工程化與自動化276
10.1.4小結277
10.2性能測試278
10.2.1基準測試278
10.2.2壓力測試280
10.2.3基準測試驅動開發281
10.2.4測試數據與業務數據的轉換283
10.3總結284
10.4參考資源284
第11章產品化285
11.1項目工程化285
11.1.1目錄結構285
11.1.2構建工具286
11.1.3編碼規範289
11.1.4代碼審查289
11.2部署流程290
11.2.1部署環境291
11.2.2部署操作291
11.3性能293
11.3.1動靜分離293
11.3.2啟用緩存294
11.3.3多進程架構294
11.3.4讀寫分離295
11.4日誌295
11.4.1訪問日誌295
11.4.2異常日誌296
11.4.3日誌與數據庫299
11.4.4分割日誌299
11.4.5小結299
11.5監控報警299
11.5.1監控300
11.5.2報警的實現302
11.5.3監控系統的穩定性303
11.6穩定性303
11.7異構共存304
11.8總結305
11.9參考資源305
附錄A安裝Node 306
A.1 Windows系統下的Node安裝306
A.2 Mac系統下Node的安裝307
A.3 Linux系統下Node的安裝308
A.4總結309
A.5參考資源309
附錄B調試Node 310
B. 1 Debugger 310
B.2 NodeInspector 311
B.2.1安裝NodeInspector 312
B.2.2錯誤堆棧312
B.3總結313
附錄C Node編碼規範314
C.1根源314
C.2編碼規範315
C.2.1空格與格式315
C .2.2命名規範317
C.2.3比較操作318
C.2.4字面量318
C.2.5作用域318
C.2.6數組與對象319
C.2.7異步320
C.2.8類與模塊320
C.2.9註解規範321
C. 3最佳實踐321
C.3.1衝突的解決原則321
C.3.2給編輯器設置檢測工具321
C.3.3版本控制中的hook 322
C.3.4持續集成322
C.4總結322
C.5參考資源323
附錄D搭建局域NPM倉庫324
D.1 NPM倉庫的安裝325
D.1.1安裝Erlang和CouchDB 325
D.1.2搭建NPM倉庫326
D.2高階應用328
D.2.1鏡像倉庫328
D.2.2私有模塊應用328
D.2.3純私有倉庫329
D.3總結331
D.4參考資源332