精讀《深刻淺出Node.js》

前言

若是你想要深刻學習Node,那你不能錯過《深刻淺出Node.js》這本書,它從不一樣的視角介紹了 Node 內在的特色和結構。由首章Node 介紹爲索引,涉及Node 的各個方面,主要內容包含模塊機制的揭示、異步I/O 實現原理的展示、異步編程的探討、內存控制的介紹、二進制數據Buffer 的細節、Node 中的網絡編程基礎、Node 中的Web 開發、進程間的消息傳遞、Node 測試以及經過Node 構建產品須要的注意事項。最後的附錄介紹了Node 的安裝、調試、編碼規範和NPM 倉庫等事宜。在讀這本書的過程當中我收穫頗多,並用思惟導圖的方式記錄下來,方便本身後期溫故。若是你恰好沒有讀過,能夠當作度這本書的預習閱讀,相信你也會有所收穫(思惟導圖圖片可能有點小,記得點開看)git

第1章 Node簡介

第2章 模塊機制


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

第3章 異步I/O


本章介紹了異步I/O和另外一些非I/O的異步方法。能夠看出,事件循環是異步實現的核心,它 與瀏覽器中的執行模型基本保持了一致。而像古老的Rhino,儘管是較早就能在服務器端運行的 JavaScript運行時,可是執行模型並不像瀏覽器採用事件驅動,而是像其餘語言通常採用同步I/O 做爲主要模型,這形成它在性能上無所發揮。Node正是依靠構建了一套完善的高性能異步I/O框 架,打破了JavaScript在服務器端止步不前的局面。編程

第4章 異步編程


在接觸Node的過程當中,不少人粗略地接觸了幾個回調函數以後就放棄了。儘管異步編程略微 艱難,可是並不是一無可取,一旦習慣,就顯得天然。從社區和過往的經驗而言,JavaScript異步編 程的難題已經基本解決,不管是經過事件,仍是經過Promise/Deferred模式,或者流程控制庫。相 信在掌握以上技巧以後,異步編程不是難事,習慣異步編程以後,將會收穫許多值得享受的編程 體驗。後端

本章主要介紹了主流的幾種異步編程解決方案,這是目前JavaScript中主要使用的方案。但對 於其餘語言而言,還有協程(coroutine)等方式。可是因爲Node基於V8的緣由,在目前EMCAScript5 的實現下還不支持協程。這些標準和規範還在制定中,因此暫時不做介紹。將來的V8若是支持 Generator,也將在Node中能直接使用。瀏覽器

最後,由於人們老是習慣性地以線性的方式進行思考,以至異步編程相對較爲難以掌握。這 個世界以異步運行的本質是不會由於你們線性思惟的慣性而改變。就像日出月落不會由於你的心 情而改變其自有的運行軌跡。服務器

第5章 內存控制

Node將JavaScript的主要應用場景擴展到了服務器端,相應要考慮的細節也與瀏覽器端不一樣, 須要更嚴謹地爲每一份資源做出安排。總的來講,內存在Node中不能爲所欲爲地使用,但也不是 徹底不擅長。本章介紹了內存的各類限制,但願讀者能夠在使用中規避禁忌,與生態系統中的各 種軟件搭配,發揮Node的長處。微信

第6章 理解Buffer


體驗過JavaScript友好的字符串操做後,有些開發者可能會造成思惟定勢,將Buffer當作字 符串來理解。但字符串與Buffer之間有實質上的差別,即Buffer是二進制數據,字符串與Buffer 之間存在編碼關係。所以,理解Buffer的諸多細節十分必要,對於如何高效處理二進制數據十 分有用。網絡

第7章 網絡編程


Node基於事件驅動和非阻塞設計,在分佈式環境中尤爲能發揮出它的特長,基於事件驅動可 以實現與大量的客戶端進行鏈接,非阻塞設計則讓它能夠更好地提高網絡的響應吞吐。Node提供 了相對底層的網絡調用,以及基於事件的編程接口,使得開發者在這些模塊上十分輕鬆地構建網 絡應用。下一章咱們將在本章的基礎上探討具體的Web應用。框架

第8章 構建Web應用


本章涉及的內容較爲豐富,在Web應用的整個構建過程當中,從處理請求到響應請求的整個過 程都有原理性闡述,整理本章細節就能夠完成一個功能完備的Web開發框架。過去的各類Web技 術,隨着框架和庫的成型,開發者每每迷糊地知道應用框架和庫,殊不知道細節的實現,這比如 沒有地圖卻在野地裏行進。本章的內容但願能爲Node開發者帶來地圖似的啓發,在開發Web應用 時可以心有輪廓,明瞭細微。異步

如今知名和成熟的Web框架有Connect、Express等,本章中的內容在這些框架中都有實現, 由於行文的緣由,本章中的代碼實現得較爲粗糙,實際使用請使用這些成熟的框架。

第9章 玩轉進程

儘管Node從單線程的角度來說它有夠脆弱的:既不能充分利用多核CPU資源,穩定性也無 法獲得保障。可是羣體的力量是強大的,經過簡單的主從模式,就能夠將應用的質量提高一個 檔次。在實際的複雜業務中,咱們可能要啓動不少子進程來處理任務,結構甚至遠比主從模式 複雜,可是每一個子進程應當是簡單到只作好一件事,而後經過進程間通訊技術將它們鏈接起來 便可。這符合Unix的設計理念,每一個進程只作一件事,並作好一件事,將複雜分解爲簡單,將 簡單組合成強大。

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

第10章 測試

測試是應用或者系統最重要的質量保證手段。有單元測試實踐的項目,必然對代碼的粒度和 層次都掌握得較好。單元測試可以保證項目每一個局部的正確性,也可以在項目迭代過程當中很好地 監督和反饋迭代質量。若是沒有單元測試,就如同黑夜裏沒有秉燭的行走。

對於性能,在編碼過程當中必定存在部分感性認知,與實際狀況有部分誤差,而性能測試則能 很好地斧正這種差別。

第11章 產品化


通常而言,決定用一項技術進行產品開發時,只有最先期是與這門技術徹底相關的。隨着時 間的遷移,要解決的已經不是原來的問題了,一門技術只能在必定層面上發揮出它的優點來。用 Node也是同樣,隨着開發的進展、涉及層面的增多,咱們看到在產品的角度要解決的問題依然是 大部分技術都要解決的問題。咱們但願讀者可以將Node歸入到新的層面上進行考慮,使它更適應 產品,在產品中發揮出更大的優點來。

擴展

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

《深刻淺出Node.js》PDF

思惟導圖下載地址

相關文章
相關標籤/搜索