深入淺出Node.js

深入淺出Node.js

目錄簡介第1章Node簡介1.1Node的誕生歷程1.2Node的命名與起源1.2.1為什麼是JavaScript1.2.2為什麼叫Node1.3Node給JavaScript帶來的意義1.4Node的特點1.4.1非同步I/O1.4.2事件與回調函數1.4.3單線程1.4.4跨平台1.5Node的應用場景1.5.1I/O密集型1.5.2是否不擅長CPU密集型業務1.5.3與遺留系統和平共處1.5.4分散式應用1.6Node的使用者1.7參考資源第2章模塊機制2.1Common JS的出發點2.1.2Common dows系統下的Node安裝A.2Mac系統下Node的安裝A.3Lin

內容簡介


《深入淺出Node.js》從不同的視角介紹了Node內在的特點和結構。由首章Node介紹為索引,涉及Node的各個方面,主要內容包含模塊機制的揭示、非同步I/O實現原理的展現、非同步編程的探討、內存控制的介紹、二進位數據Buffer的細節、Node中的網路編程基礎、Node中的Web開發、進程間的消息傳遞、Node測試以及通過Node構建產品需要的注意事項。最後的附錄介紹了Node的安裝、調試、編碼規範和NPM倉庫等事宜。

作者簡介


朴靈,真名田永強,文藝型碼農,就職於阿里巴巴數據平台,資深工程師,Node.js佈道者,寫了多篇文章介紹Node.js的細節。活躍於CNode社區,是線下會議NodeParty的組織者和JSConfChina(滬JS和京JS)的組織者之一。熱愛開源,多個Node.js模塊的作者。叩首問路,碼夢為生。

目錄簡介


第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.4 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.4.2 process.nextTick()
3.4.3 setImmediate()
3.5 事件驅動與高性能伺服器
3.6 總結
3.7 參考資源
第4章 非同步編程
4.1 函數式編程
4.1.1 高階函數
4.1.2 偏函數用法
4.2 非同步編程的優勢與難點
4.2.1 優勢
4.2.2 難點
4.3 非同步編程解決方案
4.3.1 事件發布/訂閱模式
4.3.2 Promise/Deferred模式
4.3.3 流程式控制制庫
4.4 非同步併發控制
4.4.1 bagpipe的解決方案
4.4.2 async的解決方案
4.5 總結
4.6 參考資源
第5章 內存控制
5.1 V8的垃圾回收機制與內存限制
5.1.1 Node與V8
5.1.2 V8的內存限制
5.1.3 V8的對象分配
5.1.4 V8的垃圾回收機制
5.1.5 查看垃圾回收日誌
5.2 高效使用內存
5.2.1 作用域
5.2.2 閉包
5.2.3 小結
5.3 內存指標
5.3.1 查看內存使用情況
5.3.2 堆外內存
5.3.3 小結
5.4 內存泄漏
5.4.1 慎將內存當做緩存
5.4.2 關注隊列狀態
5.5 內存泄漏排查
5.5.1 node-heapdump
5.5.2 node-memwatch
5.5.3 小結
5.6 大內存應用
5.7 總結
5.8 參考資源
第6章 理解Buffer
6.1 Buffer結構
6.1.1 模塊結構
6.1.2 Buffer對象
6.1.3 Buffer內存分配
6.2 Buffer的轉換
6.2.1 字元串轉Buffer
6.2.2 Buffer轉字元串
6.2.3 Buffer不支持的編碼類型
6.3 Buffer的拼接
6.3.1 亂碼是如何產生的
6.3.2 setEncoding()與string_decoder()
6.3.3 正確拼接Buffer
6.4 Buffer與性能
6.5 總結
6.6 參考資源
第7章 網路編程
7.1 構建TCP服務
7.1.1 TCP
7.1.2 創建TCP伺服器端
7.1.3 TCP服務的事件
7.2 構建UDP服務
7.2.1 創建UDP套接字
7.2.2 創建UDP伺服器端
7.2.3 創建UDP客戶端
7.2.4 UDP套接字事件
7.3 構建HTTP服務
7.3.1 HTTP
7.3.2 http模塊
7.3.3 HTTP客戶端
7.4 構建WebSocket服務
7.4.1 WebSocket握手
7.4.2 WebSocket數據傳輸
7.4.3 小結
7.5 網路服務與安全
7.5.1 TLS/SSL
7.5.2 TLS服務
7.5.3 HTTPS服務
7.6 總結
7.7 參考資源
第8章 構建Web應用
8.1 基礎功能
8.1.1 請求方法
8.1.2 路徑解析
8.1.3 查詢字元串
8.1.4 Cookie
8.1.5 Session
8.1.6 緩存
8.1.7 Basic認證
8.2 數據上傳
8.2.1 表單數據
8.2.2 其他格式
8.2.3 附件上傳
8.2.4 數據上傳與安全
8.3 路由解析
8.3.1 文件路徑型
8.3.2 MVC
8.3.3 RESTful
8.4 中間件
8.4.1 異常處理
8.4.2 中間件與性能
8.4.3 小結
8.5 頁面渲染
8.5.1 內容響應
8.5.2 視圖渲染
8.5.3 模板
8.5.4 Bigpipe
8.6 總結
8.7 參考資源
第9章 玩轉進程
9.1 服務模型的變遷
9.1.1 石器時代:同步
9.1.2 青銅時代:複製進程
9.1.3 白銀時代:多線程
9.1.4 黃金時代:事件驅動
9.2 多進程架構
9.2.1 創建子進程
9.2.2 進程間通信
9.2.3 句柄傳遞
9.2.4 小結
9.3 集群穩定之路
9.3.1 進程事件
9.3.2 自動重啟
9.3.3 負載均衡
9.3.4 狀態共享
9.4 Cluster模塊
9.4.1 Cluster工作原理
9.4.2 Cluster事件
9.5 總結
9.6 參考資源
第10章 測試
10.1 單元測試
10.1.1 單元測試的意義
10.1.2 單元測試介紹
10.1.3 工程化與自動化
10.1.4 小結
10.2 性能測試
10.2.1 基準測試
10.2.2 壓力測試
10.2.3 基準測試驅動開發
10.2.4 測試數據與業務數據的轉換
10.3 總結
10.4 參考資源
第11章 產品化
11.1 項目工程化
11.1.1 目錄結構
11.1.2 構建工具
11.1.3 編碼規範
11.1.4 代碼審查
11.2 部署流程
11.2.1 部署環境
11.2.2 部署操作
11.3 性能
11.3.1 動靜分離
11.3.2 啟用緩存
11.3.3 多進程架構
11.3.4 讀寫分離
11.4 日誌
11.4.1 訪問日誌
11.4.2 異常日誌
11.4.3 日誌與資料庫
11.4.4 分割日誌
11.4.5 小結
11.5 監控報警
11.5.1 監控
11.5.2 報警的實現
11.5.3 監控系統的穩定性
11.6 穩定性
11.7 異構共存
11.8 總結
11.9 參考資源
附錄A 安裝Node
A.1 Windows系統下的Node安裝
A.2 Mac系統下Node的安裝
A.3 Linux系統下Node的安裝
A.4 總結
A.5 參考資源
附錄B 調試Node
B.1 Debugger
B.2 Node Inspector
B.2.1 安裝Node Inspector
B.2.2 錯誤堆棧
B.3 總結
附錄C Node編碼規範
C.1 根源
C.2 編碼規範
C.2.1 空格與格式
C.2.2 命名規範
C.2.3 比較操作
C.2.4 字面量
C.2.5 作用域
C.2.6 數組與對象
C.2.7 非同步
C.2.8 類與模塊
C.2.9 註解規範
C.3 最佳實踐
C.3.1 衝突的解決原則
C.3.2 給編輯器設置檢測工具
C.3.3 版本控制中的hook
C.3.4 持續集成
C.4 總結
C.5 參考資源
附錄D 搭建局域NPM倉庫
D.1 NPM倉庫的安裝
D.1.1 安裝Erlang和CouchDB
D.1.2 搭建NPM倉庫
D.2 高階應用
D.2.1 鏡像倉庫
D.2.2 私有模塊應用
D.2.3 純私有倉庫
D.3 總結
D.4 參考資源