精讀《深入淺出Node.js》

程式設計師解決師發表於2018-06-08

前言

如果你想要深入學習Node,那你不能錯過《深入淺出Node.js》這本書,它從不同的視角介紹了 Node 內在的特點和結構。由首章Node 介紹為索引,涉及Node 的各個方面,主要內容包含模組機制的揭示、非同步I/O 實現原理的展現、非同步程式設計的探討、記憶體控制的介紹、二進位制資料Buffer 的細節、Node 中的網路程式設計基礎、Node 中的Web 開發、程式間的訊息傳遞、Node 測試以及通過Node 構建產品需要的注意事項。最後的附錄介紹了Node 的安裝、除錯、編碼規範和NPM 倉庫等事宜。在讀這本書的過程中我收穫頗多,並用思維導圖的方式記錄下來,方便自己後期溫故。如果你剛好沒有讀過,可以當做度這本書的預習閱讀,相信你也會有所收穫(思維導圖圖片可能有點小,記得點開看)

第1章 Node簡介

精讀《深入淺出Node.js》

精讀《深入淺出Node.js》

第2章 模組機制

精讀《深入淺出Node.js》

精讀《深入淺出Node.js》

精讀《深入淺出Node.js》

精讀《深入淺出Node.js》
CommonJS提出的規範均十分簡單,但是現實意義卻十分強大。Node通過模組規範,組織了 自身的原生模組,彌補JavaScript弱結構性的問題,形成了穩定的結構,並向外提供服務。NPM 通過對包規範的支援,有效地組織了第三方模組,這使得專案開發中的依賴問題得到很好的解決, 並有效提供了分享和傳播的平臺,藉助第三方開源力量,使得Node第三方模組的發展速度前所未 有,這對於其他後端JavaScript語言實現而言是從未有過的。從一定的角度上講,CommonJS規範 幫助Node形成了它的骨骼。只有茁壯的根,才能培養出茂盛的枝葉,併成長為參天大樹。正是這 些底層的規範和實踐,使得Node有序地發展著,擺脫掉過去JavaScript紛亂和被誤解的局面,進 而進化成良性的生態系統。

第3章 非同步I/O

精讀《深入淺出Node.js》

精讀《深入淺出Node.js》
本章介紹了非同步I/O和另一些非I/O的非同步方法。可以看出,事件迴圈是非同步實現的核心,它 與瀏覽器中的執行模型基本保持了一致。而像古老的Rhino,儘管是較早就能在伺服器端執行的 JavaScript執行時,但是執行模型並不像瀏覽器採用事件驅動,而是像其他語言一般採用同步I/O 作為主要模型,這造成它在效能上無所發揮。Node正是依靠構建了一套完善的高效能非同步I/O框 架,打破了JavaScript在伺服器端止步不前的局面。

第4章 非同步程式設計

精讀《深入淺出Node.js》

精讀《深入淺出Node.js》
在接觸Node的過程中,很多人粗略地接觸了幾個回撥函式之後就放棄了。儘管非同步程式設計略微 艱難,但是並非一無是處,一旦習慣,就顯得自然。從社群和過往的經驗而言,JavaScript非同步編 程的難題已經基本解決,無論是通過事件,還是通過Promise/Deferred模式,或者流程控制庫。相 信在掌握以上技巧之後,非同步程式設計不是難事,習慣非同步程式設計之後,將會收穫許多值得享受的程式設計 體驗。

本章主要介紹了主流的幾種非同步程式設計解決方案,這是目前JavaScript中主要使用的方案。但對 於其他語言而言,還有協程(coroutine)等方式。但是由於Node基於V8的原因,在目前EMCAScript5 的實現下還不支援協程。這些標準和規範還在制定中,所以暫時不作介紹。未來的V8如果支援 Generator,也將在Node中能直接使用。

最後,因為人們總是習慣性地以線性的方式進行思考,以致非同步程式設計相對較為難以掌握。這 個世界以非同步執行的本質是不會因為大家線性思維的慣性而改變。就像日出月落不會因為你的心 情而改變其自有的執行軌跡。

第5章 記憶體控制

精讀《深入淺出Node.js》

精讀《深入淺出Node.js》

精讀《深入淺出Node.js》

Node將JavaScript的主要應用場景擴充套件到了伺服器端,相應要考慮的細節也與瀏覽器端不同, 需要更嚴謹地為每一份資源作出安排。總的來說,記憶體在Node中不能隨心所欲地使用,但也不是 完全不擅長。本章介紹了記憶體的各種限制,希望讀者可以在使用中規避禁忌,與生態系統中的各 種軟體搭配,發揮Node的長處。

第6章 理解Buffer

精讀《深入淺出Node.js》
體驗過JavaScript友好的字串操作後,有些開發者可能會形成思維定勢,將Buffer當做字 符串來理解。但字串與Buffer之間有實質上的差異,即Buffer是二進位制資料,字串與Buffer 之間存在編碼關係。因此,理解Buffer的諸多細節十分必要,對於如何高效處理二進位制資料十 分有用。

第7章 網路程式設計

精讀《深入淺出Node.js》

精讀《深入淺出Node.js》

精讀《深入淺出Node.js》
Node基於事件驅動和非阻塞設計,在分散式環境中尤其能發揮出它的特長,基於事件驅動可 以實現與大量的客戶端進行連線,非阻塞設計則讓它可以更好地提升網路的響應吞吐。Node提供 了相對底層的網路呼叫,以及基於事件的程式設計介面,使得開發者在這些模組上十分輕鬆地構建網 絡應用。下一章我們將在本章的基礎上探討具體的Web應用。

第8章 構建Web應用

精讀《深入淺出Node.js》

精讀《深入淺出Node.js》

精讀《深入淺出Node.js》
本章涉及的內容較為豐富,在Web應用的整個構建過程中,從處理請求到響應請求的整個過 程都有原理性闡述,整理本章細節就可以完成一個功能完備的Web開發框架。過去的各種Web技 術,隨著框架和庫的成型,開發者往往迷糊地知道應用框架和庫,卻不知道細節的實現,這好比 沒有地圖卻在野地裡行進。本章的內容希望能為Node開發者帶來地圖似的啟發,在開發Web應用 時能夠心有輪廓,明瞭細微。

現在知名和成熟的Web框架有Connect、Express等,本章中的內容在這些框架中都有實現, 因為行文的原因,本章中的程式碼實現得較為粗糙,實際使用請使用這些成熟的框架。

第9章 玩轉程式

精讀《深入淺出Node.js》

精讀《深入淺出Node.js》

儘管Node從單執行緒的角度來講它有夠脆弱的:既不能充分利用多核CPU資源,穩定性也無 法得到保障。但是群體的力量是強大的,通過簡單的主從模式,就可以將應用的質量提升一個 檔次。在實際的複雜業務中,我們可能要啟動很多子程式來處理任務,結構甚至遠比主從模式 複雜,但是每個子程式應當是簡單到只做好一件事,然後通過程式間通訊技術將它們連線起來 即可。這符合Unix的設計理念,每個程式只做一件事,並做好一件事,將複雜分解為簡單,將 簡單組合成強大。

儘管通過 child_process 模組可以大幅提升Node的穩定性,但是一旦主程式出現問題, 所 有子程式將會失去管理。在Node的程式管理之外,還需要用監聽程式數量或監聽日誌的方式確 保整個系統的穩定性,即使主程式出錯退出,也能及時得到監控警報,使得開發者可以及時處 理故障。

第10章 測試

精讀《深入淺出Node.js》

測試是應用或者系統最重要的質量保證手段。有單元測試實踐的專案,必然對程式碼的粒度和 層次都掌握得較好。單元測試能夠保證專案每個區域性的正確性,也能夠在專案迭代過程中很好地 監督和反饋迭代質量。如果沒有單元測試,就如同黑夜裡沒有秉燭的行走。

對於效能,在編碼過程中一定存在部分感性認知,與實際情況有部分偏差,而效能測試則能 很好地斧正這種差異。

第11章 產品化

精讀《深入淺出Node.js》

精讀《深入淺出Node.js》

精讀《深入淺出Node.js》
一般而言,決定用一項技術進行產品開發時,只有最早期是與這門技術完全相關的。隨著時 間的遷移,要解決的已經不是原來的問題了,一門技術只能在一定層面上發揮出它的優勢來。用 Node也是一樣,隨著開發的進展、涉及層面的增多,我們看到在產品的角度要解決的問題依然是 大部分技術都要解決的問題。我們希望讀者能夠將Node納入到新的層面上進行考慮,使它更適應 產品,在產品中發揮出更大的優勢來。

擴充套件

思維導圖能比較清晰的還原整本書的知識結構體系,如果你還沒用看過這本書,可以按照這個思維導圖的思路快速預習一遍,提高學習效率。學習新事物總容易遺忘,我比較喜歡在看書的時候用思維導圖做些記錄,便於自己後期複習,如果你已經看過了這本書,也建議你收藏複習。如果你有神馬建議或則想法,歡迎留言或加我微信交流:646321933

精讀《圖解HTTP》

《深入淺出Node.js》PDF

思維導圖下載地址

相關文章