Node簡介
這一章簡要介紹了Node,從中可以瞭解Node的發展歷程及其帶來的影響和價值。
為什麼叫Node?起初,Ryan Dahl稱他的專案為web.js,就是一個Web伺服器,但是專案的發展超過了他當初單純開發一個Web伺服器的想法,變成構建網路應用的一個基本框架,這樣可以在它的基礎上構建更多的東西,諸如伺服器、客戶端、命令列工具等。Node發展為一個強制不共享任何資源的單執行緒、單程式系統,包括十分適宜網路的庫,為構建大型分散式應用程式提供了基礎設施,其目標也是成為一個構建快速、可伸縮的網路應用平臺。它自身非常簡單,通過通訊協議來組織很多Node,非常容易通過擴充套件來達成構建大型網路應用的目的。每一個Node程式都構成這個網路應用中的一個節點,這是它名字所含意義的真諦。 腦圖
模組機制
這一章主要介紹Node的模組機制,從中瞭解到Node如何實現CommonJS模組和包規範的。在這一章中,我們詳細的解釋了模組在引用過程中的編譯、載入規則。另外,我們還能讀到更深度的關於Node自身原始碼的組織架構。
CommonJS規範為JavaScript定製了一個美好的願景—希望JavaScript能夠在任何地方執行。腦圖
非同步I/O
這一章展示了Node中我們將非同步I/O作為主要設計理念的原因。另外,還會介紹到非同步I/O的詳細實現過程。
事件迴圈是非同步實現的核心,它與瀏覽器中的執行模型基本上保持一致。而向古老的Rhino,儘管是較早就能在伺服器執行的JavaScript執行時但是執行模型並不像瀏覽器採用事件驅動,而是使用像其他語言一樣採用同步I/O作為主要模型,這造成它在效能上面無法發揮。Node正是依靠構建了一套完善的高效能非同步I/O框架,打破了JavaScript在伺服器止步不前的局面。 腦圖
非同步程式設計
這一章主要介紹非同步程式設計,其中最常見的非同步程式設計問題介紹,也有詳細的解決方案。在這一章中我們可以接觸到Promise、事件、高階函式是如何進行流程控制的。 (這一章建議多看書)腦圖
記憶體控制
這一章主要介紹了Node的記憶體控制,主要內容有垃圾回收、記憶體限制、檢視記憶體、記憶體洩漏、大記憶體應用等細節。
Node將JavaScript的主要應用場景幫到了伺服器端,相應要考慮的細節也與瀏覽器端不同,在伺服器端,資源向來是寸土寸金,要為海量使用者服務,就使得一切資源都要高效迴圈利用,需要更嚴謹為每一份資源作出安排。腦圖
理解Buffer
這一章主要介紹了前端JavaScript裡不能遇到的Buffer。由於Node中會涉及頻繁的網路和磁碟I/O,處理位元組流資料會是很常見的行為,這部分的場景與純粹的前端開發完全不同。
體會過JavaScript友好字串操作後,有些開發者可能會形成思維定勢,將Buffer當作字串來理解。但字串與Buffer之間有實質性的差異,即Buffer是二進位制資料,字串與Buffer之間存在編碼關係。因此,理解Buffer的諸多細節十分必要,對於如何高效處理二進位制十分有用。腦圖
網路程式設計
這一章介紹了Node支援的TCP,UDP,HTTP程式設計,還講了有關於Websocket與TSL、HTTPS的介紹。
利用Node可以十分方便地搭建網路伺服器,不需要專門的Web伺服器作為容器,僅僅需要幾行程式碼就可以構建伺服器。Node提供了net、dgram、http、https這4個模組,分別用於處理TCP、UDP、HTTP、HTTPS,適用於服務端和客戶端。腦圖
構建Web應用
這一章主要介紹了構建Web應用過程中用到的大多數技術細節,如資料處理、路由、MVC、模板、RESTful等。 我覺得這一章對於我麼開發一個Nodejs方面的應用很有指導性作用,整理本章細節就可以完成一個功能的Web開發框架,這章的目的也就是希望讀者學習過這一章後能夠對Node開發帶來地圖式的啟發,在開發Web應用時能夠心有輪廓,明瞭細微。腦圖
玩轉程式
這一章主要介紹Node的多程式技術,以及如何藉助多程式方式來提升應用的可用性和效能。從嚴格意義上面來講,Node並非真正的單執行緒架構,在第3章我們還敘述過Node自身還有一定的I/O執行緒存在,這些I/O執行緒由底層libuv處理,這部分執行緒對於JavaScript開發者是透明的,只在C++擴充套件開發時才會關注到。JavaScript程式碼永遠執行在V8上,是單執行緒的。本章將圍繞JavaScript部分展開,所以遮蔽底層細節的討論。腦圖
測試
這一章主要介紹Node的單元測試和效能測試技巧。測試的意義在於,在使用者消費產出的程式碼之前,開發者首先消費他,給予其重要的質量保證。
測試包括單元測試、效能測試、安全測試和功能測試等幾個方面,本章將從Node實踐的角度來介紹單元測試和效能測試。腦圖
產品化
“行百里路半九十”,完成產品開發的程式碼編寫後,才完成了專案的第一步。這是一章介紹了將Node產品化所需要的注意到的細節,如專案工程化、程式碼部署、日誌、效能、監控報警、穩定性、異構共存。 對於Node開發者而言,很多其他語言走過的路需要開發者帶著Node特效重新踐行一遍。這並不是壞事,Node更接近底層使得開發者對於細節的可控性非常高。腦圖