怎樣進行Node.js的分析

這篇文章給大家介紹怎樣進行Node.js的分析,內(nèi)容非常詳細(xì),感興趣的小伙伴們可以參考借鑒,希望對大家能有所幫助。

成都創(chuàng)新互聯(lián)公司服務(wù)項目包括鄲城網(wǎng)站建設(shè)、鄲城網(wǎng)站制作、鄲城網(wǎng)頁制作以及鄲城網(wǎng)絡(luò)營銷策劃等。多年來,我們專注于互聯(lián)網(wǎng)行業(yè),利用自身積累的技術(shù)優(yōu)勢、行業(yè)經(jīng)驗、深度合作伙伴關(guān)系等,向廣大中小型企業(yè)、政府機構(gòu)等提供互聯(lián)網(wǎng)行業(yè)的解決方案,鄲城網(wǎng)站推廣取得了明顯的社會效益與經(jīng)濟效益。目前,我們服務(wù)的客戶以成都為中心已經(jīng)輻射到鄲城省份的部分城市,未來相信會繼續(xù)擴大服務(wù)區(qū)域并繼續(xù)獲得客戶的支持與信任!

一、關(guān)于 Node.js

1.Node.js 是什么

Node.js? is a JavaScript runtime built on Chrome's V8 JavaScript engine.

按照  Node.js官網(wǎng)的解釋非常簡單:

Node.js? 是一個基于 Chrome V8 引擎 的 JavaScript 運行時。

那我們該怎么理解這句話呢?

  • Node.js 不是 JavaScript 的應(yīng)用、也不是一種框架、更不是一門語言。它是一個 JavaScript 的運行環(huán)境,就和瀏覽器是一個 JavaScript 運行環(huán)境一樣。

  • 它是構(gòu)建在 Chrome’s V8 這個著名的 JavaScript 引擎之上的。

這里不得不聊聊 Chrome & V8。

2.Node.js 誕生的背景

2008年,Google開發(fā)了Google地圖,但Google地圖那時是安卓的原生應(yīng)用。為了進一步擴展Google 地圖的服務(wù)范圍,Google 針對瀏覽器開發(fā)了瀏覽器版本的Google 地圖。而這對瀏覽器的處理能力提出來更高的要求,于是當(dāng)時的產(chǎn)品經(jīng)理  Sundar Pichai 極力說服當(dāng)時的董事會,要求開發(fā)一款瀏覽器(也就是現(xiàn)在的Chrome)。

當(dāng)時的瀏覽器市場還是微軟的,因為操作系統(tǒng)內(nèi)置IE,讓IE幾乎占據(jù)整個江山,并且IE是免費的,所以當(dāng)時要開發(fā)一款瀏覽器遭到了董事會極力反對。

Sundar Pichai 強調(diào)價值不在瀏覽器本身,而在于它能訪問的內(nèi)容:也就是網(wǎng)絡(luò)應(yīng)用程序。當(dāng)時最賣錢的產(chǎn)品,像 Google 文檔。Google 地圖 如果想吸引更多的用戶使用,并從其中的廣告銷售牟利,就必須徹底地提高瀏覽器的性能,最終他說服了董事會,把開發(fā)瀏覽器立了項。

隨之而來的就是如何提高瀏覽器性能的問題?當(dāng)時項目組認(rèn)識到,開發(fā)者不太愿意使用 JavaScript 是因為它在瀏覽器中運行得太慢了,和傳統(tǒng)語言不是一個量級的。

恰在此時,Lars Bak 出現(xiàn)了。這位 Google Chrome 背后的天才,早在1991年就在硅谷引起了人們的注意,后來成為業(yè)界最優(yōu)秀的程序員之一??墒窃?000年初,他選擇離開硅谷,回到他的祖國丹麥過幸福的生活,他覺得硅谷的開發(fā)者工作太緊張,生活方式不健康。Lars Bak 回到丹麥后,賺了足夠的錢養(yǎng)家糊口,就租了一大片農(nóng)場,開始粉刷農(nóng)舍。

然后就接到了 Sundar Pichai 的電話。Lars Bak 說 他并不在乎當(dāng)什么高級經(jīng)理,他想要做的就是打破技術(shù)的邊界,于是他接受了 Google 的 offer,但并沒有回到硅谷,而是在他自己的農(nóng)場里就開始了工作。

2008年9月2日,V8 與 Chrome 在同一天宣布開源。世界以非同尋常的方式發(fā)現(xiàn)了 Chrome。Chrome 是通過Google 早前發(fā)布的漫畫冊傳出去的。公關(guān)忙成一團來回應(yīng)這個消息,匆匆忙忙地舉行了電話會議,發(fā)表博客日志解釋到底發(fā)生了什么,隨后決定開新聞發(fā)布會,最后在Googleplex舉辦產(chǎn)品展示。

看過發(fā)布會的同學(xué)可能會留意到,當(dāng)時非常倉促,連一個精美的PPT都沒有。

怎樣進行Node.js的分析

(圖片來源于網(wǎng)絡(luò))

漫畫中明確提到了將 V8 嵌入到非瀏覽器項目中的可能性。

3.Node.js 的誕生

談到 Node.js 的誕生,不可避免的要聊到它的創(chuàng)始人 —— Node.js 之父 Ryan Dahl。Ryan Dahl 在開發(fā) Node.js 之前是高性能Web服務(wù)的開發(fā)專家,在幫客戶解決性能問題的同時,碰到了Web服務(wù)的高并發(fā)帶來的性能問題,他嘗試過很多語言,都失敗了。經(jīng)過多年的研究,Ryan Dahl 大致的感覺到了解決問題的關(guān)鍵是通過事件驅(qū)動和異步I/O來達(dá)成目的。

就在他快要絕望的時候,V8 隨著 Chrome 瀏覽器的問世而出現(xiàn),JavaScript 腳本語言的執(zhí)行效率得到質(zhì)的提升,這給 Ryan Dahl 帶來新的啟示:JavaScript 本身就是單線程的,而且瀏覽器發(fā)起的 AJAX 請求就是非阻塞的。如果將 JavaScript 和異步 IO 以及一個簡單的 HTTP 服務(wù)器集合在一起,就會變成一個很酷的東西。他原本的研究就這樣與 V8 之間碰撞出火花,V8 滿足他關(guān)于高性能 Web 服務(wù)的所有想象:

  1. 沒有歷史包袱,沒有同步 I/O。不會出現(xiàn)一個同步 I/O 導(dǎo)致事件循環(huán)性能急劇降低的情況。

  2. V8 性能足夠好,遠(yuǎn)遠(yuǎn)比 Python、Ruby 等其他腳本語言的引擎要快。

  3. JavaScript 語言的閉包特性非常方便,比 C 中的回調(diào)函數(shù)好用。

于是在 2009 年的 2 月,按新的想法他提交了項目的第一行代碼,這個項目的名字最終被定名為"node"。

2009 年 5 月,Ryan Dahl 正式向外界宣布他做的這個項目。

2009 年底,Ryan Dahl 在柏林舉行的 JSConf EU 會議上發(fā)表關(guān)于 Node.js 的演講,之后 Node.js 逐漸流行于世。

總得來說,Node.js 并不是憑空誕生的,它的出現(xiàn)要歸功于 Ryan Dahl 歷時多年的研究,以及一個恰到好處的節(jié)點。

二、Node.js 現(xiàn)狀

2018 年 5 月 31 日,Node.js 基金會發(fā)布的 用戶調(diào)查報告,顯示學(xué)習(xí) Node.js 看起來更容易了,少于 2 年 node 經(jīng)驗的用戶中,有 43% 的覺得“容易”。絕大多數(shù)(85%)Node.js 用戶用于網(wǎng)頁開發(fā),43% 參與一些企業(yè)級開發(fā),13% 用于大數(shù)據(jù)分析,8% 用于嵌入式系統(tǒng)。

用戶調(diào)查報告中還顯示,受訪的使用者會用如下的詞語來描述 Node.js。

怎樣進行Node.js的分析怎樣進行Node.js的分析

(圖片來源于網(wǎng)絡(luò))

更為重要的是,報告顯示 Node.js 社區(qū)仍然在快速成長。而這得益于 Node.js 的應(yīng)用場景非常廣泛.

怎樣進行Node.js的分析怎樣進行Node.js的分析

越來越多的開發(fā)者開始轉(zhuǎn)向 Node.js ,幾乎每個公司/小組都會有自己的命令行工具、腳手架。使用 Node.js 能夠快速開發(fā)各式各樣的能極大提高開發(fā)效率的神器。

三、Node.js 核心科技

Node.js 采用事件驅(qū)動、異步編程,為網(wǎng)絡(luò)服務(wù)而設(shè)計。

在前面我們聊 Node.js 誕生的時候,就提過 Node.js 之父 Ryan Dahl 在設(shè)計 Node.js 時就是為了解決 web 服務(wù)高并發(fā)帶來的性能問題,而這個問題隨著 V8 的出現(xiàn)而迎刃而解。

如下圖,當(dāng)網(wǎng)絡(luò)請求發(fā)生時,如果有文件或者數(shù)據(jù)庫操作,Node.js 會注冊一個回調(diào)函數(shù),然后就去處理下一個請求了。當(dāng)之前文件或者數(shù)據(jù)庫操作完成后,觸發(fā)之前注冊的事件回調(diào),進而響應(yīng)之前的網(wǎng)絡(luò)請求。

怎樣進行Node.js的分析怎樣進行Node.js的分析

由于整個設(shè)計都是以事件驅(qū)動為核心的,它的重要優(yōu)勢在于,充分利用了系統(tǒng)資源,執(zhí)行代碼無須阻塞等待某種操作完成,有限的資源可以用于其他的任務(wù)。

之后的很長一段時間,Ryan Dahl 四處發(fā)表演講,試圖說服人們相信阻塞式 IO 是錯誤的方式,如果使用非阻塞的方式來處理所有的事情,那么就可以解決很多難點。

關(guān)于事件驅(qū)動編程,可以參考我的一篇知乎文章: 《JavaScript運行機制:事件驅(qū)動編程詳解》

Node.js 的性能不錯。

前面提到的用戶調(diào)查報告中顯示,用戶評價 Node.js 最多的就是 Fast ,對,就是快!

按照 Ryan Dahl 的說法,性能是 Node.js 考慮的重要因素,選擇 C++ 和 V8 而不是別的也是基于性能的考慮。

Node.js 在設(shè)計上比較大膽,它以單進程、單線程模式運行(和 Javascript 的運行方式一致),事件驅(qū)動機制是 Node.js 通過內(nèi)部單線程高效地維護事件循環(huán)隊列來實現(xiàn)的,沒有多線程的資源占用和上下文切換,這意味著面對大規(guī)模的 http 請求,Node.js 憑借事件驅(qū)動搞定一切。由此我們可以知道這樣的設(shè)計會導(dǎo)致負(fù)載的壓力集中在 CPU 而不是內(nèi)存。所以 Node.js 特別適合 IO 密集型的應(yīng)用,能夠充分發(fā)揮 CPU 的威力。

Node.js 支持 JavaScript。

這是 Node.js 能夠發(fā)展壯大的一個非常重要的間接原因。

  • 首先,Javascript 作為前端工程師的主力語言,在技術(shù)社區(qū)中有相當(dāng)?shù)奶栒倭Α6?,隨著 Web 技術(shù)的不斷發(fā)展,特別是前端的重要性增加,不少前端工程師開始試水”后臺應(yīng)用“,在許多采用 Node.js 的企業(yè)中,工程師都表示因為習(xí)慣了 Javascript,所以選擇 Node.js。

  • 其次,Javascript 的匿名函數(shù)和閉包特性非常適合事件驅(qū)動、異步編程。

  • 有 Google V8 引擎的加持,Node.js 的性能也是受益其中。

當(dāng)然事件驅(qū)動、異步編程也不是沒有它的弊端,當(dāng)都寫成回調(diào)函數(shù)的形勢后,會有違正常人的思維,剛開始會特別不習(xí)慣,并且回調(diào)太多,容易產(chǎn)生回調(diào)地獄,當(dāng)然后面的 Promise、Async、Await 都致力于解決這個問題。

四、Node.js 背后的那些人那些事

Node.js 誕生后,就吸引了一群有趣的人參與 Node.js 早期的開發(fā),他們一開始就發(fā)現(xiàn)軟件包管理在 Node.js 里將會非常有用武之地,于是他們開始各自開發(fā)包管理工具。其中有一個癡迷于 Node.js 的 Yahoo 員工 Isaac Schlueter,他辭掉工作,開始專心開發(fā)包管理工具(就是現(xiàn)在的 npm ),他曾經(jīng)深度參與過 Nodejs 的開發(fā),這使得他可以在 Node.js 中實現(xiàn) CommonJS 的模塊規(guī)范。

這款包管理工具足夠優(yōu)秀,得到了 Node 官方的大力支持,它贏了。這款包管理工具,或者說 npm,開始和 Node 安裝包捆綁打包,它可不是一個單獨的第三方插件,不需要你裝完 Node 再去下載包管理工具。這塊 Node 官方認(rèn)證的金字招牌一直掛到今天。

也就是在這個時候(2010, Node.js 誕生的第二年),一家位于硅谷的創(chuàng)業(yè)公司注意到了該項目。這家公司就是 Joyent,主要從事云計算和數(shù)據(jù)分析等。Joyent 意識到 Node.js 項目的價值,Joyent 用很少一筆錢從 Ryan Dahl 手中買走了 Node.js。

Ryan Dahl 就以區(qū)區(qū)幾萬美元,把 Node.js 包括源碼在內(nèi)的所有一股腦賣給 Joyent。數(shù)百萬人每天用 Node.js 作為 JavaScript 開發(fā)的工具,而發(fā)明 Node.js 的人只用它賺了幾萬美元。

之后,Ryan Dahl 就加入 Joyent ,全職負(fù)責(zé) Node.js 的開發(fā),也就是從此刻起,Node.js 進入了它生命歷程里的第二個階段:從個人項目變成一個公司組織下的項目。Joyent 注冊了“Node.js”這個商標(biāo),使用其相關(guān)內(nèi)容需要得到法律授權(quán)。

與此同時,npm 的作者 Isaac Schlueter 被 Joyent 聘來開發(fā) Node.js,但他保留了 npmjs.org 域名、npm 源碼以及源碼中的任何專利的所有權(quán),這些都是他自己的知識產(chǎn)權(quán)。這個決定會對后世產(chǎn)生深遠(yuǎn)影響……

在加入 Joyent 成為全職的 Node 開發(fā)人員之后,Ryan Dahl 也隨之成為更加重量級的人物。參加各種大會,被粉絲要求合影拍照,隨便寫點東西都會有很多人響應(yīng)。但 Ryan 并不喜歡這種狀態(tài),他說:"我是一個程序員,我想寫代碼,我想無拘無束地表達(dá)我的想法。我并不喜歡這種狀態(tài)……"。

2012 年,就在 Node.js 如日中天的時候,Ryan Dahl 選擇離開了 Node.js。npm 的作者 Isaac Schlueter 接替他登上了項目組的領(lǐng)導(dǎo)崗位。就是在這個時候,JavaScript 開發(fā)者們紛紛登場了,能用 JavaScript 實現(xiàn)某個工具,他們絕對不會看其他語言一眼!因此他們開始用 Javascript 開發(fā) Node 程序,并且樂在其中。

Isaac Schlueter 親眼目睹過 Joyent 給 Ryan Dahl 出的價格是多么低廉,也知道 Node.js 的價值到底應(yīng)該值多少錢。于是在 2013 年,他決定讓 npm 走商業(yè)化路線,因此他向 Joyent 遞交了辭呈,成立了一家公司 —— npm 公司。也就是從這個時候開始,Node.js 出現(xiàn)了很嚴(yán)重的問題:貢獻(xiàn)頻率開始下降,代碼提交主要來自社區(qū),代碼的版本下降到三個月才能發(fā)布一個小版本,社區(qū)一直期待的 1.0 版本遲遲不能發(fā)布。另外還發(fā)生了 人稱代詞事件 致使 Node.js 項目的活躍度更低,Joyent 對于項目的不作為和其他層面對社區(qū)其他成員的干預(yù),導(dǎo)致項目進展十分緩慢,用蝸牛的速度來形容一點也不為過。

2014 年 8 月,以社區(qū)里非常有威望的 Mikeal Rogers 為首,幾個重要的核心貢獻(xiàn)者,發(fā)起了 io.js 項目,宣告了 Node.js 社區(qū)的正式分裂。io.js 不再是之前的技術(shù)負(fù)責(zé)人模式,取而代之的是技術(shù)委員會模式。io.js 于 2015-01-14 發(fā)布了 v1.0.0 版本。自此 io.js 一發(fā)不可收拾,以周為單位發(fā)布新的版本,在架構(gòu)層面依然保持著 Node.js 的樣子(由 Ryan Dahl 時確立)但是對于 ECMAScript 6 持擁抱態(tài)度,又重新保持了周為單位的版本更新頻率。

與此同時,Joyent 也意識到了問題,成立了臨時的 Node.js 顧問委員會,想借助顧問委員會的形式來打造一個更加開放的管理模式,以找到辦法來平衡所有成員的需要,為各方提供一個平臺來投入資源到 Node.js 項目。顧問委員會調(diào)研了 IBM(Eclipse)、Linux 基金會、Apache 等,決定成立 Node.js 基金會的形式。

到了 2015 年 5 月,Node.js 顧問委員會最終決定與 io.js 進行和解,共同制定一個新的管理模式來確保 Node.js 的下一步發(fā)展, Joyent 公司本著開放的原則,在這件事情上也做出很大的讓步。但此時,io.js 已經(jīng)發(fā)了 2.0 版本,Node.js 遠(yuǎn)遠(yuǎn)落后于 io.js ,最終的解決方案是 Node.js 項目和 io.js 項目都將加入 Node.js 基金會,Node.js 基金會之后 Node.js 版本的發(fā)布將基于目前 io.js 的進展來進行,也就是說 io.js 會繼續(xù)保持發(fā)布,而 Node.js 的下個大版本跨過 1.0、2.0、3.0,直接到 4.0。如下圖所示:

怎樣進行Node.js的分析

然后,npm 也做大做強了,讓 Node.js 的普及率爆炸性增長。所有 JavaScript 開發(fā)者都開始用 Node.js 做開發(fā),而 npm 則成為每個 JavaScript 開發(fā)者日常工作中不可或缺的一部分??珊苌儆腥酥?npm 是一家企業(yè),是一個由風(fēng)投資金贊助的私人公司。

npm 的經(jīng)營策略由一個公司來掌舵,其含義是什么?在去年的這個大會上,Node.js 之父 Ryan Dahl 再次登臺演講。他談到了 Node.js 的設(shè)計誤區(qū)。其中說了一句話:

模塊倉庫的中心化(甚至由私人所控制)是一種不幸。—— Ryan Dahl

關(guān)于怎樣進行Node.js的分析就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,可以學(xué)到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。

當(dāng)前標(biāo)題:怎樣進行Node.js的分析
本文網(wǎng)址:http://www.muchs.cn/article4/geeiie.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站制作、軟件開發(fā)、ChatGPT網(wǎng)站建設(shè)、網(wǎng)站策劃、營銷型網(wǎng)站建設(shè)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

成都網(wǎng)站建設(shè)公司