天天看點

精讀《深入淺出Node.js》

前言

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

https://juejin.im/entry/5b1f5bcc5188251360239b8a#%E7%AC%AC1%E7%AB%A0-Node%E7%AE%80%E4%BB%8B 第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紛亂和被誤解的局面,進 而進化成良性的生态系統。

https://juejin.im/entry/5b1f5bcc5188251360239b8a#%E7%AC%AC3%E7%AB%A0-%E5%BC%82%E6%AD%A5I-O 第3章 異步I/O

精讀《深入淺出Node.js》
精讀《深入淺出Node.js》

本章介紹了異步I/O和另一些非I/O的異步方法。可以看出,事件循環是異步實作的核心,它 與浏覽器中的執行模型基本保持了一緻。而像古老的Rhino,盡管是較早就能在伺服器端運作的 JavaScript運作時,但是執行模型并不像浏覽器采用事件驅動,而是像其他語言一般采用同步I/O 作為主要模型,這造成它在性能上無所發揮。Node正是依靠建構了一套完善的高性能異步I/O框 架,打破了JavaScript在伺服器端止步不前的局面。

https://juejin.im/entry/5b1f5bcc5188251360239b8a#%E7%AC%AC4%E7%AB%A0-%E5%BC%82%E6%AD%A5%E7%BC%96%E7%A8%8B 第4章 異步程式設計

精讀《深入淺出Node.js》
精讀《深入淺出Node.js》

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

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

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

https://juejin.im/entry/5b1f5bcc5188251360239b8a#%E7%AC%AC5%E7%AB%A0-%E5%86%85%E5%AD%98%E6%8E%A7%E5%88%B6 第5章 記憶體控制

精讀《深入淺出Node.js》
精讀《深入淺出Node.js》

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

https://juejin.im/entry/5b1f5bcc5188251360239b8a#%E7%AC%AC6%E7%AB%A0-%E7%90%86%E8%A7%A3Buffer 第6章 了解Buffer

精讀《深入淺出Node.js》

體驗過JavaScript友好的字元串操作後,有些開發者可能會形成思維定勢,将Buffer當做字 符串來了解。但字元串與Buffer之間有實質上的差異,即Buffer是二進制資料,字元串與Buffer 之間存在編碼關系。是以,了解Buffer的諸多細節十分必要,對于如何高效處理二進制資料十 分有用。

https://juejin.im/entry/5b1f5bcc5188251360239b8a#%E7%AC%AC7%E7%AB%A0-%E7%BD%91%E7%BB%9C%E7%BC%96%E7%A8%8B 第7章 網絡程式設計

精讀《深入淺出Node.js》
精讀《深入淺出Node.js》

Node基于事件驅動和非阻塞設計,在分布式環境中尤其能發揮出它的特長,基于事件驅動可 以實作與大量的用戶端進行連接配接,非阻塞設計則讓它可以更好地提升網絡的響應吞吐。Node提供 了相對底層的網絡調用,以及基于事件的程式設計接口,使得開發者在這些子產品上十分輕松地建構網 絡應用。下一章我們将在本章的基礎上探讨具體的Web應用。

https://juejin.im/entry/5b1f5bcc5188251360239b8a#%E7%AC%AC8%E7%AB%A0-%E6%9E%84%E5%BB%BAWeb%E5%BA%94%E7%94%A8 第8章 建構Web應用

精讀《深入淺出Node.js》
精讀《深入淺出Node.js》
精讀《深入淺出Node.js》

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

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

https://juejin.im/entry/5b1f5bcc5188251360239b8a#%E7%AC%AC9%E7%AB%A0-%E7%8E%A9%E8%BD%AC%E8%BF%9B%E7%A8%8B 第9章 玩轉程序

精讀《深入淺出Node.js》
精讀《深入淺出Node.js》

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

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

https://juejin.im/entry/5b1f5bcc5188251360239b8a#%E7%AC%AC10%E7%AB%A0-%E6%B5%8B%E8%AF%95 第10章 測試

精讀《深入淺出Node.js》

測試是應用或者系統最重要的品質保證手段。有單元測試實踐的項目,必然對代碼的粒度和 層次都掌握得較好。單元測試能夠保證項目每個局部的正确性,也能夠在項目疊代過程中很好地 監督和回報疊代品質。如果沒有單元測試,就如同黑夜裡沒有秉燭的行走。

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

https://juejin.im/entry/5b1f5bcc5188251360239b8a#%E7%AC%AC11%E7%AB%A0-%E4%BA%A7%E5%93%81%E5%8C%96 第11章 産品化

精讀《深入淺出Node.js》
精讀《深入淺出Node.js》
精讀《深入淺出Node.js》

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

https://juejin.im/entry/5b1f5bcc5188251360239b8a#%E6%89%A9%E5%B1%95 擴充

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

原文釋出時間為:2018年06月12日

原文作者:掘金

本文來源: 

掘金

 如需轉載請聯系原作者

繼續閱讀