發表於2024-11-23
Node.js設計模式(第2版) pdf epub mobi txt 電子書 下載
? Node.js 的開發方式:如何使用正確的思維方式去解決一個 Node.js 開發設計問題。比如你會學習到,傳統設計模式在 Node.js 開發中的不同體現,或者如何設計提供單一功能的模塊。
? 一整套解決常見 Node.js 設計和編碼問題的設計模式:你會學習到一整套像“瑞士軍刀”一樣功能多樣、實用的設計模式,讓你能即學即用,解決日常遇到的程序開發和設計問題。
? 如何編寫模塊化、高效率的 Node.js 程序:你將會理解開發大規模並且結構組織閤理的 Node.js 程序的基本方法,並能運用這些方法去解決不屬於現有設計模式範疇的新問題。
? 真實項目中用到的庫和技術:LevelDb、Redis、RabbitMQ、ZMQ 及 Express 等用來作為示例闡述某個設計模式或者方法,讓例子更加實用,對生態係統及它解決問題的方法有所瞭解。
本書通過大量示例形象地闡述瞭 Node.js 的哲學思想和設計模式。內容主要由六部分組成:Node 核心思想、基礎設計模式、異步控製流模式、流編程、Node.js 的傳統設計模式和特有設計模式、通用編程的 Web 應用以及處理復雜實際問題的高級編程技巧。這是一本值得深入品讀的書籍,讀者若具備一些軟件設計的理論知識會有助於理解書中提齣的概念,中級 Node.js 開發者也會從本書有所收獲。本書尤其適用於已經接觸過 Node.js 並且想在效率、設計質量和可擴展性方麵獲得提升的開發者。
Mario Casciaro,軟件工程碩士學位,軟件工程師,企業傢,對技術、科學和開源知識充滿瞭熱情。他在IBM 開始瞭職業生涯,數年間先後參與很多不同産品的開發,例如Tivoli EndpointManager、Cognos Insight 及SalesConnect。後來,他加入瞭一個成長中的SaaS 公司――D4HTechnologies,負責開發一款實時應急管理的前沿産品。現在,Mario 是Sponsorama.com 的聯閤創始人兼CEO,這是一個幫助在綫項目募集企業贊助資金的平颱。Mario 也是Node.js Design Patterns(Node.js 設計模式)第一版的作者。
翻譯成員全部來自陸金所大前端團隊,也是公眾號大前端工程師的翻譯小組成員,他們在公眾號與知乎專欄裏麵也有很多新的技術文章的翻譯,此次由寸誌老師帶隊,大傢一邊在公司進行nodejs項目的推廣實踐,一邊將實踐的心得注入到本書翻譯的理解,這是非常難得的結閤,相信大傢在讀的過程中能體會到這一點。
第1 章歡迎來到Node.js 平颱
Node.js 的哲學思想
小核心
小模塊
小接觸麵
簡單和實用
認識Node.js 6 和ES2015
let 和const 關鍵字
箭頭函數
類語法
增強的對象字麵量
Map 和Set 集閤
WeakMap 和WeakSet 集閤
模闆字麵量
其他ES2015 特性
Reactor 模式
I/O 是緩慢的
阻塞I/O
非阻塞I/O
事件多路分解器
Reactor 模式簡介
Node.js-libuv 的非阻塞I/O 引擎
Node.js 的秘訣
總結
第2 章Node.js 基礎設計模式
迴調模式
CPS(Continuation Passing Style
同步或異步
Node.js 迴調約定
模塊係統及其模式
揭示模塊模式
Node.js 模塊解釋
模塊定義模式
觀察者模式
EventEmitter 類
創建和使用EventEmitter
傳播錯誤
使任何對象可觀察
同步和異步事件
EventEmitter 與迴調
組閤迴調和EventEmitter
總結
第3 章異步控製流模式之迴調函數
異步編程的睏難
創建一個簡單的網絡蜘蛛
迴調地獄
使用純JavaScript
迴調規則
應用迴調規則
順序執行
並行執行
有限製的並行執行
async 庫
順序執行
並行執行
有限製的並行執行
總結
xiv
第4 章異步控製流模式之ES2015+
promise
什麼是promise
Promises/A+ 實現
Node.js 風格函數的promise 化
順序執行
並行執行
有限製的並行執行
在公共API 中暴露callback 和promise
generator
generator 基礎
generator 的異步控製流
順序執行
並行執行
有限製的並行執行
使用Babel 的async await
安裝和運行Babel
比較
總結
第5 章流編程
流的重要性
緩衝和流
空間效率
時間效率
組閤性
開始學習流
流的分類
可讀流
可寫流
雙嚮流(Duplex stream)
變換流
使用管道拼接流
使用流處理異步流程
順序執行
無序並行執行
無序有限製的並行執行
順序並行執行
xv
管道模式
組閤流
復製流
閤並流
復用和分解
總結
第6 章設計模式
工廠模式
創建對象的通用接口
一種封裝的機製
構建一個簡單的代碼分析器
可組閤的工廠函數
擴展
揭示構造函數
隻讀事件觸發器
擴展
代理模式
實現代理模式的方法
不同方法的比較
創建日誌記錄的寫入流
生態係統中的代理模式――函數鈎子與麵嚮行為編程(AOP)
ES2015 中的Proxy 對象
擴展
裝飾者模式(Decorator)
實現裝飾者模式的方法
裝飾一個LevelUP 數據庫
擴展
適配器模式(Adapter)
通過文件係統API 來使用LevelUP 數據庫
擴展
策略模式(Strategy)
支持多種格式的配置對象
擴展
狀態模式
實現一個基本的自動防故障套接字
模闆模式(Template)
配置管理器模闆
xvi
擴展
中間件(Middleware)
Express 中的中間件
設計模式中的中間件
為?MQ 創建中間件框架
在Koa 中使用生成器的中間件
命令模式(Command)
靈活的設計模式
總結
第7 章連接模塊
模塊和依賴
Node.js 中最常見的依賴
內聚和耦閤
有狀態的模塊
連接模塊模式
硬編碼依賴
依賴注入
服務定位器
依賴注入容器
連接插件
插件作為包
擴展點
插件控製與應用程序控製的擴展
實現注銷插件
總結
第8 章通用JavaScript 的Web 應用程序
與瀏覽器端共享代碼
共享模塊
Webpack 簡介
Webpack 的魔力
Webpack 的優點
使用ES2015 和Webpack
跨平颱開發基礎
運行時代碼分支
構建時代碼分支
模塊交換
xvii
用於跨平颱開發的設計模式
React 介紹
第一個React 組件
JSX 是什麼
配置Webpack 以實現JSX 轉換
在瀏覽器中渲染
React 路由庫
創建通用JavaScript 應用程序
創建可用的組件
服務端渲染
通用渲染和路由
通用數據檢索
總結
第9 章高級異步編程技巧
需要異步初始化的模塊
規範解決方案
預初始化隊列
題外話
異步批處理和緩存
實現沒有緩存或批處理的服務器
異步請求批處理
異步請求緩存
使用promise 進行批處理和緩存
運行CPU 綁定的任務
解決子集和問題
交叉使用setImmediate
使用多進程
總結
第10 章擴展與架構模式
應用程序擴展介紹
擴展Node.js 應用程序
可擴展性的三個維度
剋隆和負載均衡
集群模塊
處理有狀態通信
使用反嚮代理進行擴展
xviii
使用服務注冊錶
對等負載均衡
分解復雜的應用程序
單體式架構
微服務架構
微服務架構中的集成模式
總結
第11 章消息傳遞與集成模式
消息係統的基礎
單嚮和請求/應答模式
消息類型
異步消息和隊列
對等或基於代理的消息
發布/訂閱模式
構建簡約的實時聊天應用程序
使用Redis 作為消息代理
使用?MQ 對等發布/訂閱
持久訂閱者
管道和任務分配模式
MQ 扇齣/扇入模式
使用AMQP 實現管道和競爭消費者模式
請求/應答模式
關聯標識符
返迴地址
總結
前言
很多人認為Node.js 的齣現是Web 開發領域十年內最大的變化,它就像是遊戲規則的改變者。之所以被喜愛不僅是因為技術上的齣眾能力,同時也因為它帶給Web 開發新的思維方式。
首先,Node.js 應用是使用JavaScript 語言編寫的,而JavaScript 又是唯一被絕大多數Web 瀏覽器原生支持的編程語言。該特性使得單語言應用棧以及服務端、客戶端代碼共享成為可能。Node.js 本身也促進瞭JavaScript 語言的興起和發展。人們意識到,在服務端使用JavaScript 並不像在瀏覽器端使用它那樣糟糕,並且人們將慢慢喜歡上它的編程思維和它混閤的天性,即麵嚮對象和函數式編程的結閤。
其次,單綫程和異步架構也是Node.js 帶來的革命性變化。除瞭性能和可擴展性方麵的明顯優勢外,其改變瞭開發者處理程序並發和並行的方式。隊列取代瞭互斥鎖,迴調函數和事件
機製取代瞭多綫程,因果關係取代瞭同步性。
最後也是最重要的一點,Node.js 擁有一套完整的生態係統:npm 包管理器、不斷增長的模塊數量、熱情活躍的開發社區,以及基於簡單、實用主義和極端模塊化而産生的獨特文化。然而,因為這些特性,Node.js 開發給人一種與其他服務端語言開發非常不一樣的感受,剛開始接觸Node.js 的開發者,會經常睏惑於如何有效地解決一些最常見的設計和代碼編寫問題。
常見的問題有:“如何組織代碼?”“設計這個係統的最好方法是什麼?”“怎樣使我的程序更加模塊化?”“我該怎樣高效實現大量的異步調用?”“我該如何確保我的程序隨著規模增大會一直穩定運行,不會崩潰?”或者更簡單的問題,“Node.js 開發的正確方式是什麼?”幸運的是,Node.js 已經成為一個非常成熟的開發平颱,以上大部分問題都能通過設計模式、被證明有效的編碼技巧或者他人提供的經驗來解決。本書的目的就是指導你學習並掌握Node.js 開發的一些設計模式、編碼技巧和實踐經驗,告訴你解決這些常見問題的有效方法並教會你如何從這些方法齣發,解決你自己遇到的特定問題。通過閱讀本書,你將掌握以下這些內容:
? Node.js 的開發方式
如何使用正確的思維方式去解決一個Node.js 開發設計問題。比如你會學習到,傳統設計模式在Node.js 開發中的不同體現,或者如何設計提供單一功能的模塊。
? 一整套解決常見Node.js 設計和編碼問題的設計模式
你會學習到一整套像“瑞士軍刀”一樣功能多樣、實用的設計模式,並且你能即學即用,解決日常遇到的程序開發和設計問題。
? 如何編寫模塊化、高效率的Node.js 程序
你將會瞭解開發大規模並且結構組織閤理的Node.js 程序的基本方法,並能運用這些方法去解決不屬於現有設計模式範疇的新問題。
在本書中,你會看到一些真實項目中用到的庫和技術,比如LevelDb、Redis、RabbitMQ、ZMQ 及Express 等。這些會用來作為示例闡述某個設計模式或者方法,除瞭讓例子更加實用外,它們同時會讓你對Node.js 的生態係統以及它解決問題的一套方法有所瞭解。無論你正使用或打算在你的工作、非正式項目或者開源項目中使用Node.js,認識和使用眾所周知的設計模式和技術能夠讓你通過一種通用的語言和他人共享你的代碼和設計,不僅如此,這還會幫助你更好地瞭解Node.js 的未來,以及知道如何為其發展貢獻自己的一份力量。
各章介紹
第1 章,歡迎來到Node.js 平颱,本章通過講解Node.js 本身核心的設計模式來介紹Node.js 程序的設計,包括Node.js 的生態係統、編程思想,以及Node.js V6 版本、ES2015 和Reactor 模
式的簡單介紹。
第2 章,Node.js 基礎設計模式,開始介紹Node.js 異步編程和設計模式,討論和比較瞭迴調函數與事件觸發器(觀察者模式)。本章還介紹瞭Node.js 的模塊係統和相關模塊的設計模式。
第3 章,異步控製流模式之迴調函數,介紹瞭係列用於有效處理Node.js 中的異步控製流的模式和技術。這一章將教你怎樣使用純JavaScript 和異步庫來緩解“迴調地獄”的問題。
第4 章,異步控製流模式之ES2015+,介紹瞭Promise、Generator 和async-await 的異步控製流的探索進展。
第5 章,流編程,深度挖掘Node.js 中最重要的模式之一:流。本章將嚮你展示如何處理數據流交換及如何將它們組閤成不同的布局。
第6 章,設計模式,本章涉及一個有爭議的話題:Node.js 的傳統設計模式。介紹瞭最流行的傳統設計模式,並展示瞭它們在Node.js 中的應用。同時也介紹瞭一些JavaScript 和Node.js中獨有的新設計模式。
第7 章,連接模塊,分析瞭將多個模塊關聯到一個應用程序中的不同解決方案。在本章中我們將學習幾個設計模式,例如依賴注入容器和服務定位器。
第8 章,通用JavaScript 的Web 應用程序,探討瞭現代JavaScript Web 應用最有趣的功能之一:前、後端代碼共享。本章我們將學習通用的JavaScript 基本原則,通過使用React、Webpack
和Babel 來構建一個簡單的Web 應用程序。
第9 章,高級異步編程技巧,本章展示怎樣使用直接可用的解決方案來解決一些常見的編碼和設計問題。
第10 章,擴展和架構模式,介紹擴展Node.js 應用的基本技術和模式。
第11 章,消息傳遞與集成模式,提齣瞭最重要的消息傳遞模式,介紹如何構建和集成使用ZMQ 和AMQP 的復雜的分布式係統。你需要為本書準備什麼為瞭試驗代碼,需要安裝Node.js 第6 版(或更高版本)和npm 3(或更高版本) 。一些例子還要求使用轉碼器,例如Babel。還需要熟悉命令提示符,瞭解如何安裝npm 包,還要瞭解怎樣運行Node.js 應用。還需要有一個文本編輯器來編寫代碼和一個現代瀏覽器進行測試。
適閤讀者
本書適閤於已經接觸過Node.js 並且想在效率、設計質量和可擴展性方麵獲得提升的開發者。由於本書也包含一些基本概念,因此你隻需要通過一些基本例子瞭解相關技術即可。中級
Node.js 的開發者也會從本書有所收獲。具備一些軟件設計理論背景知識也會有助於理解本書提齣的概念。
本書假定你有Web 應用開發、JavaScript、Web 服務、數據庫和數據結構的相關知識。
約定
在本書中,你會發現許多文本樣式,這些樣式用於區分不同種類的信息。下麵是一些這些樣式的例子和它們錶示的含義。
代碼塊設置如下:
const zmq = require('zmq')
const sink = zmq.socket('pull');
sink.bindSync("tcp://*:5001");
sink.on('message', buffer => {
console.log(`Message from worker: ${buffer.toString()}`);
});
當希望讀者特彆注意代碼塊的特定部分時,以粗體顯示該部分:
function produce() {
//...
variationsStream(alphabet, maxLength)
.on('data', combination => {
//...
const msg = {searchHash: searchHash, variations: batch};
channel.sendToQueue('jobs_queue', new Buffer(JSON.stringify(msg)));
//...
})
//...
}
任何命令行輸入或輸齣設置如下:
node replier
node requestor
新術語和重要詞匯會以粗體顯示。
不錯不錯不錯不錯不錯不錯不錯不錯不錯不錯不錯不錯不錯不錯不錯不錯不錯
評分很好的學習資料書,京東的發貨送貨速度快。
評分送貨很快,質量也很好,總之很滿意。
評分還不錯,贊
評分不錯不錯不錯,挺好的!!!
評分東西很好用質量沒有問題。
評分京東自營真是差,包裝簡陋都破瞭,這本書塑封的,打開後麵一看居然這麼髒,差差差,差到極點!
評分送貨很快,質量也很好,總之很滿意。
評分Node.js設計模式(第2版)
Node.js設計模式(第2版) pdf epub mobi txt 電子書 下載