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


第2章 模組機制




第3章 非同步I/O


第4章 非同步程式設計


本章主要介紹了主流的幾種非同步程式設計解決方案,這是目前JavaScript中主要使用的方案。但對 於其他語言而言,還有協程(coroutine)等方式。但是由於Node基於V8的原因,在目前EMCAScript5 的實現下還不支援協程。這些標準和規範還在制定中,所以暫時不作介紹。未來的V8如果支援 Generator,也將在Node中能直接使用。
最後,因為人們總是習慣性地以線性的方式進行思考,以致非同步程式設計相對較為難以掌握。這 個世界以非同步執行的本質是不會因為大家線性思維的慣性而改變。就像日出月落不會因為你的心 情而改變其自有的執行軌跡。
第5章 記憶體控制



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

第7章 網路程式設計



第8章 構建Web應用



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


儘管Node從單執行緒的角度來講它有夠脆弱的:既不能充分利用多核CPU資源,穩定性也無 法得到保障。但是群體的力量是強大的,通過簡單的主從模式,就可以將應用的質量提升一個 檔次。在實際的複雜業務中,我們可能要啟動很多子程式來處理任務,結構甚至遠比主從模式 複雜,但是每個子程式應當是簡單到只做好一件事,然後通過程式間通訊技術將它們連線起來 即可。這符合Unix的設計理念,每個程式只做一件事,並做好一件事,將複雜分解為簡單,將 簡單組合成強大。
儘管通過 child_process 模組可以大幅提升Node的穩定性,但是一旦主程式出現問題, 所 有子程式將會失去管理。在Node的程式管理之外,還需要用監聽程式數量或監聽日誌的方式確 保整個系統的穩定性,即使主程式出錯退出,也能及時得到監控警報,使得開發者可以及時處 理故障。
第10章 測試

測試是應用或者系統最重要的質量保證手段。有單元測試實踐的專案,必然對程式碼的粒度和 層次都掌握得較好。單元測試能夠保證專案每個區域性的正確性,也能夠在專案迭代過程中很好地 監督和反饋迭代質量。如果沒有單元測試,就如同黑夜裡沒有秉燭的行走。
對於效能,在編碼過程中一定存在部分感性認知,與實際情況有部分偏差,而效能測試則能 很好地斧正這種差異。
第11章 產品化



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