您好,登錄后才能下訂單哦!
這篇文章主要介紹“讀Nodejs源碼的原因有哪些”,在日常操作中,相信很多人在讀Nodejs源碼的原因有哪些問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”讀Nodejs源碼的原因有哪些”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!
首先,閱讀源碼的目的無非兩個
1 深入了解和理解他或一些底層的原理
2 從中學到一些優秀的設計思想和實踐。
如果你沒有兩個目的,那其實就沒有必要去看源碼了。那接下來聊一下從閱讀nodejs源碼中,可以得到什么。
首先我們要深刻理解到nodejs是什么?大家都知道nodejs是一個js的運行時。那么到底nodejs里面有什么呢?每一部分的意義是什么呢?首先nodejs的組成是libuv、v8、第三方庫。nodejs的定位首先是一個服務器,所以其實有libuv就可以了。那么剩余的組成部分有什么用?第三方庫的作用很明顯,就是復用了業界已有的解決方案去拓展了nodejs的一些功能,并不是nodejs的核心。v8的意義是因為nodejs選用了js這個語言,所以就需要一個js的引擎。否則v8也是不需要的,直接把libuv和第三方庫編譯成二進制就行,類似nginx,redis一樣。這個是高層的視圖。從底層來看,libuv是對操作系統功能的封裝,v8是一個js解釋器。那么看nodejs源碼的意義就很明顯了。nodejs的源碼從垂直分為以下三個部分
1 js層
2 c++層(使用v8橋接js和libuv和一些自定義的c++邏輯)
3 c層
讀js層,你可以了解到nodejs實現的一些上層的邏輯,雖然js層最后還是依賴底層,但是js層也有很多邏輯,看懂了js層,在使用nodejs的時候,也就能更加深刻地了解到你在做什么,nodejs在做什么。但是js層是遠遠不夠的。因為他只是個殼子。
那么接下來,你就要去讀c++層,讀c++層的代碼,更多的是在了解如何去使用v8。假設你以后想在你的其他項目中單獨使用v8,那么nodejs的代碼就是一個參考。那么我們了解v8的使用有什么意義呢?這個問題相當于我們使用一個語言,然后了解他的編譯器/解釋器有什么意義。很多時候,我們都不需要這樣做,這完全取決于你的興趣。如果你以后想使用v8,或者你想了解js實現的底層原理,又或者你想了解一個編譯器/解釋器是如何實現的。那么你就可以去學習v8。v8首先作為一個js引擎,他里面有一個編譯器/解釋器的通用邏輯,詞法解析,語法解析,代碼生成,代碼優化等等。然后還包含了js語言本身的實現細節,比如一個js數組,一個js對象,在v8里是怎么實現的。最后,了解v8為我們暴露了什么接口,我們可以使用v8做什么。
最后就是讀libuv,nodejs的重點是作為服務器,所以相對來說,讀libuv的才是重點,我們都知道v8只是一個js引擎,他沒有網絡,dns、文件等能力。在前端,js的文件,網絡等能力來源于宿主瀏覽器。在nodejs,這些能力就來源于libuv。這是nodejs為什么叫nodejs,而不叫v8。因為他不只是v8。他還實現了自己的一些功能。所以你也可以實現自己的功能,加上v8的能力,創造出一個新的服務器。言歸正傳,那么讀libuv可以學到什么東西呢?libuv是實現服務器的核心。所以我們可以從libuv中學習到實現一個服務器用到的技術。從libuv官網中我們也可以知道,libuv包括了進程、線程、定時器、文件、tcp、udp、unix域、線程池、dns等等能力,使用到操作系統能力包括進程間通信(管道、unix域、eventfd)、線程池、事件驅動(epoll、select、poll、kqueue等)、inotify機制、文件操作等等,使用數據結構和算法有二叉堆、紅黑樹、隊列等。
總的來說,閱讀nodejs源碼最直接的是理解nodejs的工作原理和nodejs的本質。如果你是一個nodejs的開發者,這無疑是一個很好的收獲。其次,如果你有興趣,你還可以了解到編譯器,操作系統的知識。額外地,你也可以學習到nodejs中的一些設計思想,比如定時器的設計,從早期版本到后來的重構背景。又或者如果你來設計一個服務器,你怎么設計。
從理論上聊了一下閱讀nodejs源碼的一些看法,下面順便聊一下我自己的看法和體會。我閱讀nodejs源碼的原因是非常直接的,因為我希望我成為一個優秀的nodejs工程師。我對v8和libuv本身并沒有太大興趣。雖然我一直是一個前端工程師,但是我也不會去讀js引擎的源碼。至于libuv,相關的異步io庫非常多,而且說到服務器的設計,nginx、redis無疑是更值得讀的。但是成為一個優秀的nodejs工程師,深入了解和深刻理解nodejs本身是非常必要的。相對來說,nodejs是非常原生的。很多時候我們覺得讀nodejs源碼沒有意義是因為沒有深度或廣度地去使用nodejs,可能只是停留到框架層面,復制著業務的最佳實踐,成功地避開了一些坑。當你遇到一些難題,卻又難以解決,甚至業界也沒有解決方案的時候,你就會深刻理解到閱讀源碼的意義。當然,這種時候可能不會很(比如https://cnodejs.org/topic/600b9de15d04ac76cf2181a7和https://cnodejs.org/topic/6018f1b103d797fb8e66e71c#6019f31903d7976d1066e9d2等)。
從開始讀nodejs源碼到現在,我覺得這是一段非常艱難、快樂、深刻的經歷。他讓我不僅更了解和理解nodejs,也在更高層面地提高了我。雖然我一直在推廣閱讀nodejs源碼、寫了很多文章、也和其他同學進行了很多交流。但是并不說明非讀源碼不可,個人覺得,讀源碼是一種好的習慣,也是讓你變得優秀的方式,但是因為讀哪些源碼,這個完全取決于個人的興趣和選擇。不要盲目地去讀,要帶有目的。對個人而言,我是非常感謝nodejs,也非常敬佩nodejs作者和貢獻者,但是我覺得我在閱讀nodejs源碼中,更多的是了解了nodejs的原理,并沒有學到太多我想學的東西,v8算一方面,而libuv的內容,我覺得看nginx和操作系統內核可能是更好的選擇,但是libuv相比來說可能更輕量,更快了解一個異步框架的設計。
到此,關于“讀Nodejs源碼的原因有哪些”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。