今天終於把樸靈老師寫的《深刻淺出Node.js》給學習完了, 這本書不是一本簡單的Node入門書籍,它沒有停留在Node介紹或者框架、庫的使用層面上,而是從不一樣的視角來揭示Node本身內在的特色和結構。建議有必定Node基礎或者作過Node方面的小項目的同窗閱讀,看完之後你的思惟會有很奇特的碰撞,我看的時候就經常會有這樣的想法:「哦,原來這個功能是這樣實現的哦」。下面這篇文章是我第二次閱讀《深刻淺出Node.js》的一些學習記錄,而且經過百度腦圖這個工具來畫出思惟導圖,天天將本身的學習總結寫在這篇文章下面。html
圖片文字過小能夠右鍵重新標籤頁打開圖片,而後點擊就能夠放大顯示。 新增原始文件腦圖地址,這樣你們就能夠直接到腦圖去看思惟導圖前端
這一章簡要介紹了Node,從中能夠了解Node的發展歷程及其帶來的影響和價值。web
爲何叫Node?起初,Ryan Dahl稱他的項目爲web.js,就是一個Web服務器,可是項目的發展超過了他當初單純開發一個Web服務器的想法,變成構建網絡應用的一個基本框架,這樣能夠在它的基礎上構建更多的東西,諸如服務器、客戶端、命令行工具等。Node發展爲一個強制不共享任何資源的單線程、單進程系統,包括十分適宜網絡的庫,爲構建大型分佈式應用程序提供了基礎設施,其目標也是成爲一個構建快速、可伸縮的網絡應用平臺。它自身很是簡單,經過通訊協議來組織不少Node,很是容易經過擴展來達成構建大型網絡應用的目的。每個Node進程都構成這個網絡應用中的一個節點,這是它名字所含意義的真諦。
編程
這一章主要介紹Node的模塊機制,從中瞭解到Node如何實現CommonJS模塊和包規範的。在這一章中,咱們詳細的解釋了模塊在引用過程當中的編譯、加載規則。另外,咱們還能讀到更深度的關於Node自身源代碼的組織架構。
CommonJS規範爲JavaScript定製了一個美好的願景—但願JavaScript可以在任何地方運行。瀏覽器
這一章展現了Node中咱們將異步I/O做爲主要設計理念的緣由。另外,還會介紹到異步I/O的詳細實現過程。
事件循環是異步實現的核心,它與瀏覽器中的執行模型基本上保持一致。而向古老的Rhino,儘管是較早就能在服務器運行的JavaScript運行時可是執行模型並不像瀏覽器採用事件驅動,而是使用像其餘語言同樣採用同步I/O做爲主要模型,這形成它在性能上面沒法發揮。Node正是依靠構建了一套完善的高性能異步I/O框架,打破了JavaScript在服務器止步不前的局面。
安全
這一章主要介紹異步編程,其中最多見的異步編程問題介紹,也有詳細的解決方案。在這一章中咱們能夠接觸到Promise、事件、高階函數是如何進行流程控制的。 (這一章建議多看書)
服務器
這一章主要介紹了Node的內存控制,主要內容有垃圾回收、內存限制、查看內存、內存泄漏、大內存應用等細節。
Node將JavaScript的主要應用場景幫到了服務器端,相應要考慮的細節也與瀏覽器端不一樣,在服務器端,資源向來是寸土寸金,要爲海量用戶服務,就使得一切資源都要高效循環利用,須要更嚴謹爲每一份資源做出安排。
網絡
這一章主要介紹了前端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應用過程當中用到的大多數技術細節,如數據處理、路由、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更接近底層使得開發者對於細節的可控性很是高。