摘要:從社區(qū)和過往的經(jīng)驗而言異步編程的難題已經(jīng)基本解決無論是通過事件還是通過模式或者流程控制庫。本章主要介紹了主流的幾種異步編程解決方案這是目前中主要使用的方案。最后因為人們總是習慣性地以線性的方式進行思考以致異步編程相對較為難以掌握。
前言
如果你想要深入學習Node,那你不能錯過《深入淺出Node.js》這本書,它從不同的視角介紹了 Node 內(nèi)在的特點和結(jié)構(gòu)。由首章Node 介紹為索引,涉及Node 的各個方面,主要內(nèi)容包含模塊機制的揭示、異步I/O 實現(xiàn)原理的展現(xiàn)、異步編程的探討、內(nèi)存控制的介紹、二進制數(shù)據(jù)Buffer 的細節(jié)、Node 中的網(wǎng)絡(luò)編程基礎(chǔ)、Node 中的Web 開發(fā)、進程間的消息傳遞、Node 測試以及通過Node 構(gòu)建產(chǎn)品需要的注意事項。最后的附錄介紹了Node 的安裝、調(diào)試、編碼規(guī)范和NPM 倉庫等事宜。在讀這本書的過程中我收獲頗多,并用思維導圖的方式記錄下來,方便自己后期溫故。如果你剛好沒有讀過,可以當做度這本書的預(yù)習閱讀,相信你也會有所收獲(思維導圖圖片可能有點小,記得點開看)
第1章 Node簡介 第2章 模塊機制
CommonJS提出的規(guī)范均十分簡單,但是現(xiàn)實意義卻十分強大。Node通過模塊規(guī)范,組織了 自身的原生模塊,彌補JavaScript弱結(jié)構(gòu)性的問題,形成了穩(wěn)定的結(jié)構(gòu),并向外提供服務(wù)。NPM 通過對包規(guī)范的支持,有效地組織了第三方模塊,這使得項目開發(fā)中的依賴問題得到很好的解決, 并有效提供了分享和傳播的平臺,借助第三方開源力量,使得Node第三方模塊的發(fā)展速度前所未 有,這對于其他后端JavaScript語言實現(xiàn)而言是從未有過的。從一定的角度上講,CommonJS規(guī)范 幫助Node形成了它的骨骼。只有茁壯的根,才能培養(yǎng)出茂盛的枝葉,并成長為參天大樹。正是這 些底層的規(guī)范和實踐,使得Node有序地發(fā)展著,擺脫掉過去JavaScript紛亂和被誤解的局面,進 而進化成良性的生態(tài)系統(tǒng)。
本章介紹了異步I/O和另一些非I/O的異步方法??梢钥闯?事件循環(huán)是異步實現(xiàn)的核心,它 與瀏覽器中的執(zhí)行模型基本保持了一致。而像古老的Rhino,盡管是較早就能在服務(wù)器端運行的 JavaScript運行時,但是執(zhí)行模型并不像瀏覽器采用事件驅(qū)動,而是像其他語言一般采用同步I/O 作為主要模型,這造成它在性能上無所發(fā)揮。Node正是依靠構(gòu)建了一套完善的高性能異步I/O框 架,打破了JavaScript在服務(wù)器端止步不前的局面。
在接觸Node的過程中,很多人粗略地接觸了幾個回調(diào)函數(shù)之后就放棄了。盡管異步編程略微 艱難,但是并非一無是處,一旦習慣,就顯得自然。從社區(qū)和過往的經(jīng)驗而言,JavaScript異步編 程的難題已經(jīng)基本解決,無論是通過事件,還是通過Promise/Deferred模式,或者流程控制庫。相 信在掌握以上技巧之后,異步編程不是難事,習慣異步編程之后,將會收獲許多值得享受的編程 體驗。
本章主要介紹了主流的幾種異步編程解決方案,這是目前JavaScript中主要使用的方案。但對 于其他語言而言,還有協(xié)程(coroutine)等方式。但是由于Node基于V8的原因,在目前EMCAScript5 的實現(xiàn)下還不支持協(xié)程。這些標準和規(guī)范還在制定中,所以暫時不作介紹。未來的V8如果支持 Generator,也將在Node中能直接使用。
最后,因為人們總是習慣性地以線性的方式進行思考,以致異步編程相對較為難以掌握。這 個世界以異步運行的本質(zhì)是不會因為大家線性思維的慣性而改變。就像日出月落不會因為你的心 情而改變其自有的運行軌跡。
第5章 內(nèi)存控制Node將JavaScript的主要應(yīng)用場景擴展到了服務(wù)器端,相應(yīng)要考慮的細節(jié)也與瀏覽器端不同, 需要更嚴謹?shù)貫槊恳环葙Y源作出安排??偟膩碚f,內(nèi)存在Node中不能隨心所欲地使用,但也不是 完全不擅長。本章介紹了內(nèi)存的各種限制,希望讀者可以在使用中規(guī)避禁忌,與生態(tài)系統(tǒng)中的各 種軟件搭配,發(fā)揮Node的長處。
第6章 理解Buffer
體驗過JavaScript友好的字符串操作后,有些開發(fā)者可能會形成思維定勢,將Buffer當做字 符串來理解。但字符串與Buffer之間有實質(zhì)上的差異,即Buffer是二進制數(shù)據(jù),字符串與Buffer 之間存在編碼關(guān)系。因此,理解Buffer的諸多細節(jié)十分必要,對于如何高效處理二進制數(shù)據(jù)十 分有用。
Node基于事件驅(qū)動和非阻塞設(shè)計,在分布式環(huán)境中尤其能發(fā)揮出它的特長,基于事件驅(qū)動可 以實現(xiàn)與大量的客戶端進行連接,非阻塞設(shè)計則讓它可以更好地提升網(wǎng)絡(luò)的響應(yīng)吞吐。Node提供 了相對底層的網(wǎng)絡(luò)調(diào)用,以及基于事件的編程接口,使得開發(fā)者在這些模塊上十分輕松地構(gòu)建網(wǎng) 絡(luò)應(yīng)用。下一章我們將在本章的基礎(chǔ)上探討具體的Web應(yīng)用。
本章涉及的內(nèi)容較為豐富,在Web應(yīng)用的整個構(gòu)建過程中,從處理請求到響應(yīng)請求的整個過 程都有原理性闡述,整理本章細節(jié)就可以完成一個功能完備的Web開發(fā)框架。過去的各種Web技 術(shù),隨著框架和庫的成型,開發(fā)者往往迷糊地知道應(yīng)用框架和庫,卻不知道細節(jié)的實現(xiàn),這好比 沒有地圖卻在野地里行進。本章的內(nèi)容希望能為Node開發(fā)者帶來地圖似的啟發(fā),在開發(fā)Web應(yīng)用 時能夠心有輪廓,明了細微。
現(xiàn)在知名和成熟的Web框架有Connect、Express等,本章中的內(nèi)容在這些框架中都有實現(xiàn), 因為行文的原因,本章中的代碼實現(xiàn)得較為粗糙,實際使用請使用這些成熟的框架。
第9章 玩轉(zhuǎn)進程盡管Node從單線程的角度來講它有夠脆弱的:既不能充分利用多核CPU資源,穩(wěn)定性也無 法得到保障。但是群體的力量是強大的,通過簡單的主從模式,就可以將應(yīng)用的質(zhì)量提升一個 檔次。在實際的復雜業(yè)務(wù)中,我們可能要啟動很多子進程來處理任務(wù),結(jié)構(gòu)甚至遠比主從模式 復雜,但是每個子進程應(yīng)當是簡單到只做好一件事,然后通過進程間通信技術(shù)將它們連接起來 即可。這符合Unix的設(shè)計理念,每個進程只做一件事,并做好一件事,將復雜分解為簡單,將 簡單組合成強大。
盡管通過 child_process 模塊可以大幅提升Node的穩(wěn)定性,但是一旦主進程出現(xiàn)問題, 所 有子進程將會失去管理。在Node的進程管理之外,還需要用監(jiān)聽進程數(shù)量或監(jiān)聽日志的方式確 保整個系統(tǒng)的穩(wěn)定性,即使主進程出錯退出,也能及時得到監(jiān)控警報,使得開發(fā)者可以及時處 理故障。
第10章 測試測試是應(yīng)用或者系統(tǒng)最重要的質(zhì)量保證手段。有單元測試實踐的項目,必然對代碼的粒度和 層次都掌握得較好。單元測試能夠保證項目每個局部的正確性,也能夠在項目迭代過程中很好地 監(jiān)督和反饋迭代質(zhì)量。如果沒有單元測試,就如同黑夜里沒有秉燭的行走。
對于性能,在編碼過程中一定存在部分感性認知,與實際情況有部分偏差,而性能測試則能 很好地斧正這種差異。
第11章 產(chǎn)品化
一般而言,決定用一項技術(shù)進行產(chǎn)品開發(fā)時,只有最早期是與這門技術(shù)完全相關(guān)的。隨著時 間的遷移,要解決的已經(jīng)不是原來的問題了,一門技術(shù)只能在一定層面上發(fā)揮出它的優(yōu)勢來。用 Node也是一樣,隨著開發(fā)的進展、涉及層面的增多,我們看到在產(chǎn)品的角度要解決的問題依然是 大部分技術(shù)都要解決的問題。我們希望讀者能夠?qū)ode納入到新的層面上進行考慮,使它更適應(yīng) 產(chǎn)品,在產(chǎn)品中發(fā)揮出更大的優(yōu)勢來。
思維導圖能比較清晰的還原整本書的知識結(jié)構(gòu)體系,如果你還沒用看過這本書,可以按照這個思維導圖的思路快速預(yù)習一遍,提高學習效率。學習新事物總?cè)菀走z忘,我比較喜歡在看書的時候用思維導圖做些記錄,便于自己后期復習,如果你已經(jīng)看過了這本書,也建議你收藏復習。如果你有神馬建議或則想法,歡迎留言或加我微信交流:646321933
《深入淺出Node.js》PDF
思維導圖下載地址
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://m.hztianpu.com/yun/108067.html
摘要:強制類型轉(zhuǎn)換本章介紹了的數(shù)據(jù)類型之間的轉(zhuǎn)換即強制類型轉(zhuǎn)換包括顯式和隱式。強制類型轉(zhuǎn)換常常為人詬病但實際上很多時候它們是非常有用的。隱式強制類型轉(zhuǎn)換則沒有那么明顯是其他操作的副作用。在處理強制類型轉(zhuǎn)換的時候要十分小心尤其是隱式強制類型轉(zhuǎn)換。 前言 《你不知道的 javascript》是一個前端學習必讀的系列,讓不求甚解的JavaScript開發(fā)者迎難而上,深入語言內(nèi)部,弄清楚JavaSc...
摘要:前言有過面試經(jīng)驗的同學應(yīng)該都被問過瀏覽器兼容性的問題,對于面試官的問題,常常猝不及防,因為通常他們都是這么問的。來談?wù)劄g覽器兼容的問題吧,你對瀏覽器的兼容性有了解過嗎,那么如何才是我們正確回答這個問題的姿勢呢。 前言 有過面試經(jīng)驗的同學應(yīng)該都被問過瀏覽器兼容性的問題,對于面試官的問題,常常猝不及防,因為通常他們都是這么問的。來談?wù)劄g覽器兼容的問題吧,你對瀏覽器的兼容性有了解過嗎,那么如...
摘要:前言有過面試經(jīng)驗的同學應(yīng)該都被問過瀏覽器兼容性的問題,對于面試官的問題,常常猝不及防,因為通常他們都是這么問的。來談?wù)劄g覽器兼容的問題吧,你對瀏覽器的兼容性有了解過嗎,那么如何才是我們正確回答這個問題的姿勢呢。 前言 有過面試經(jīng)驗的同學應(yīng)該都被問過瀏覽器兼容性的問題,對于面試官的問題,常常猝不及防,因為通常他們都是這么問的。來談?wù)劄g覽器兼容的問題吧,你對瀏覽器的兼容性有了解過嗎,那么如...
摘要:它將堆內(nèi)存一分為二每一部分空間稱為。以的垃圾回收堆內(nèi)存為例做一次小的垃圾回收需要毫秒以上做一次非增量式的垃圾回收甚至要秒以上。這是垃圾回收中引起線程暫停執(zhí)行的時間在這樣的時間花銷下應(yīng)用的性能和響應(yīng)能力都會直線下降。 我們通常理解的 javascript 垃圾回收機制都停留在表面,會釋放不被引用變量內(nèi)存,最近在讀《深入淺出node.js》的書,詳細了解了下 v8 垃圾回收的算法,記錄了一...
摘要:引言本期精讀的文章是,探討如何監(jiān)聽文件的變化。概述使用使用內(nèi)置函數(shù)似乎可以解決問題但你可能會發(fā)現(xiàn)這個回調(diào)執(zhí)行有一定延遲,因為是通過輪詢檢測文件變化的,它并不能實時作出反饋,而且只能監(jiān)聽一個文件,存在效率問題。 1 引言 本期精讀的文章是:How to Watch for Files Changes in Node.js,探討如何監(jiān)聽文件的變化。 如果想使用現(xiàn)成的庫,推薦 chokida...
閱讀 1404·2019-08-30 15:44
閱讀 1448·2019-08-29 18:42
閱讀 502·2019-08-29 13:59
閱讀 840·2019-08-28 17:58
閱讀 2882·2019-08-26 12:02
閱讀 2498·2019-08-23 18:40
閱讀 2487·2019-08-23 18:13
閱讀 3191·2019-08-23 16:27