一个月时间整理《深入浅出Node.js》
今天終于把樸靈老師寫的《深入淺出Node.js》給學(xué)習(xí)完了, 這本書不是一本簡單的Node入門書籍,它沒有停留在Node介紹或者框架、庫的使用層面上,而是從不同的視角來揭示Node自己內(nèi)在的特點和結(jié)構(gòu)。建議 有一定Node基礎(chǔ)或者做過Node方面的小項目的同學(xué)閱讀,看完以后你的思維會有很奇特的碰撞,我看的時候就常常會有這樣的想法:“哦,原來這個功能是 這樣實現(xiàn)的哦”。下面這篇文章是我第二次閱讀《深入淺出Node.js》的一些學(xué)習(xí)記錄,并且通過百度腦圖這個工具來畫出思維導(dǎo)圖,每天將自己的學(xué)習(xí)總結(jié)寫在這篇文章下面。
圖片文字太小可以右鍵從新標(biāo)簽頁打開圖片,然后點擊就可以放大顯示。 新增原始文件腦圖地址,這樣大家就可以直接到腦圖去看思維導(dǎo)圖
Node簡介
這一章簡要介紹了Node,從中可以了解Node的發(fā)展歷程及其帶來的影響和價值。
為什么叫Node?起初,Ryan Dahl稱他的項目為web.js,就是一個Web服務(wù)器,但是項目的發(fā)展超過了他當(dāng)初單純開發(fā)一個Web服務(wù)器的想法,變成構(gòu)建網(wǎng)絡(luò)應(yīng)用的一個基本框 架,這樣可以在它的基礎(chǔ)上構(gòu)建更多的東西,諸如服務(wù)器、客戶端、命令行工具等。Node發(fā)展為一個強制不共享任何資源的單線程、單進程系統(tǒng),包括十分適宜 網(wǎng)絡(luò)的庫,為構(gòu)建大型分布式應(yīng)用程序提供了基礎(chǔ)設(shè)施,其目標(biāo)也是成為一個構(gòu)建快速、可伸縮的網(wǎng)絡(luò)應(yīng)用平臺。它自身非常簡單,通過通信協(xié)議來組織很多 Node,非常容易通過擴展來達成構(gòu)建大型網(wǎng)絡(luò)應(yīng)用的目的。每一個Node進程都構(gòu)成這個網(wǎng)絡(luò)應(yīng)用中的一個節(jié)點,這是它名字所含意義的真諦。 腦圖
模塊機制
這一章主要介紹Node的模塊機制,從中了解到Node如何實現(xiàn)CommonJS模塊和包規(guī)范的。在這一章中,我們詳細的解釋了模塊在引用過程中的編譯、加載規(guī)則。另外,我們還能讀到更深度的關(guān)于Node自身源代碼的組織架構(gòu)。
CommonJS規(guī)范為JavaScript定制了一個美好的愿景—希望JavaScript能夠在任何地方運行。腦圖
異步I/O
這一章展示了Node中我們將異步I/O作為主要設(shè)計理念的原因。另外,還會介紹到異步I/O的詳細實現(xiàn)過程。
事件循環(huán)是異步實現(xiàn)的核心,它與瀏覽器中的執(zhí)行模型基本上保持一致。而向古老的Rhino,盡管是較早就能在服務(wù)器運行的JavaScript運行時但是執(zhí)行模型并不像瀏覽器采用事件驅(qū)動,而是使用像其他語言一樣采用同步I/O作為主要模型,這造成它在性能上面無法發(fā)揮。Node正是依靠構(gòu)建了一套完善的高性能異步I/O框架,打破了JavaScript在服務(wù)器止步不前的局面。 腦圖
異步編程
這一章主要介紹異步編程,其中最常見的異步編程問題介紹,也有詳細的解決方案。在這一章中我們可以接觸到Promise、事件、高階函數(shù)是如何進行流程控制的。 (這一章建議多看書)腦圖
內(nèi)存控制
這一章主要介紹了Node的內(nèi)存控制,主要內(nèi)容有垃圾回收、內(nèi)存限制、查看內(nèi)存、內(nèi)存泄漏、大內(nèi)存應(yīng)用等細節(jié)。
Node將JavaScript的主要應(yīng)用場景幫到了服務(wù)器端,相應(yīng)要考慮的細節(jié)也與瀏覽器端不同,在服務(wù)器端,資源向來是寸土寸金,要為海量用戶服務(wù),就使得一切資源都要高效循環(huán)利用,需要更嚴(yán)謹為每一份資源作出安排。腦圖
理解Buffer
這一章主要介紹了前端JavaScript里不能遇到的Buffer。由于Node中會涉及頻繁的網(wǎng)絡(luò)和磁盤I/O,處理字節(jié)流數(shù)據(jù)會是很常見的行為,這部分的場景與純粹的前端開發(fā)完全不同。
體會過JavaScript友好字符串操作后,有些開發(fā)者可能會形成思維定勢,將Buffer當(dāng)作字符串來理解。但字符串與Buffer之間有實質(zhì)性的差 異,即Buffer是二進制數(shù)據(jù),字符串與Buffer之間存在編碼關(guān)系。因此,理解Buffer的諸多細節(jié)十分必要,對于如何高效處理二進制十分有用。腦圖
網(wǎng)絡(luò)編程
這一章介紹了Node支持的TCP,UDP,HTTP編程,還講了有關(guān)于Websocket與TSL、HTTPS的介紹。
利用Node可以十分方便地搭建網(wǎng)絡(luò)服務(wù)器,不需要專門的Web服務(wù)器作為容器,僅僅需要幾行代碼就可以構(gòu)建服務(wù)器。Node提供了net、dgram、http、https這4個模塊,分別用于處理TCP、UDP、HTTP、HTTPS,適用于服務(wù)端和客戶端。腦圖
構(gòu)建Web應(yīng)用
這一章主要介紹了構(gòu)建Web應(yīng)用過程中用到的大多數(shù)技術(shù)細節(jié),如數(shù)據(jù)處理、路由、MVC、模板、RESTful等。 我覺得這一章對于我么開發(fā)一個Nodejs方面的應(yīng)用很有指導(dǎo)性作用,整理本章細節(jié)就可以完成一個功能的Web開發(fā)框架,這章的目的也就是希望讀者學(xué)習(xí)過這一章后能夠?qū)ode開發(fā)帶來地圖式的啟發(fā),在開發(fā)Web應(yīng)用時能夠心有輪廓,明了細微。腦圖
玩轉(zhuǎn)進程
這一章主要介紹Node的多進程技術(shù),以及如何借助多進程方式來提升應(yīng)用的可用性和性能。從嚴(yán)格意義上面來講,Node并非真正的單線程架構(gòu),在第 3章我們還敘述過Node自身還有一定的I/O線程存在,這些I/O線程由底層libuv處理,這部分線程對于JavaScript開發(fā)者是透明的,只在 C++擴展開發(fā)時才會關(guān)注到。JavaScript代碼永遠運行在V8上,是單線程的。本章將圍繞JavaScript部分展開,所以屏蔽底層細節(jié)的討 論。腦圖
測試
這一章主要介紹Node的單元測試和性能測試技巧。測試的意義在于,在用戶消費產(chǎn)出的代碼之前,開發(fā)者首先消費他,給予其重要的質(zhì)量保證。
測試包括單元測試、性能測試、安全測試和功能測試等幾個方面,本章將從Node實踐的角度來介紹單元測試和性能測試。腦圖
產(chǎn)品化
“行百里路半九十”,完成產(chǎn)品開發(fā)的代碼編寫后,才完成了項目的第一步。這是一章介紹了將Node產(chǎn)品化所需要的注意到的細節(jié),如項目工程化、代碼部署、日志、性能、監(jiān)控報警、穩(wěn)定性、異構(gòu)共存。 對于Node開發(fā)者而言,很多其他語言走過的路需要開發(fā)者帶著Node特效重新踐行一遍。這并不是壞事,Node更接近底層使得開發(fā)者對于細節(jié)的可控性非常高。腦圖
?
轉(zhuǎn):http://tw93.github.io/2015-03-01/shen-ru-qian-chu-nodejs-reading-mind-map.html
總結(jié)
以上是生活随笔為你收集整理的一个月时间整理《深入浅出Node.js》的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: .Net程序猿玩转Android开发--
- 下一篇: 科技创业公司的效率工具箱