Node.js十年你大爺還是你大爺_第1頁
Node.js十年你大爺還是你大爺_第2頁
Node.js十年你大爺還是你大爺_第3頁
Node.js十年你大爺還是你大爺_第4頁
免費(fèi)預(yù)覽已結(jié)束,剩余1頁可下載查看

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

Node.js十年,你大爺還是你大爺

Node.js十年,你大爺還是你大爺

Node.js從2022年誕生開始,到現(xiàn)在已有10歲,在這10年里,它的成長和成熟是大家有目共睹的。它因后端簡化并發(fā)編程而被關(guān)注,因作為前端輔助開發(fā)工具而流行,因異步流程控制和回調(diào)地獄而被人詬病,因npm批量安裝模塊而被人敬仰。

作為技術(shù)領(lǐng)域里的明星工程,Node.js自誕生以來就一直處于風(fēng)口浪尖之上。下面就來聊聊這些年Node.js被人們反復(fù)提起的黑料。

Node.js是名副其實(shí)的版本帝,版本更新的確很頻繁,時間線如下。

2022年,發(fā)布了0.10版本。

2022年1月,發(fā)布了1.0.0版本〔io.js〕。

2022年5月,發(fā)布了2.x版本〔io.js〕。

2022年8月,發(fā)布了3.x版本〔io.js〕。

2022年9月,Node.js基金會發(fā)布了5.0版本與io.js合并后的第一個版本。

2022年10月,Node.js5.2.0版本成為首個LTS〔長期支持〕版本。

2022年年底,發(fā)布了5.2.4和5.5.0版本。

2022年3月,發(fā)布了5.5.0LTS版本和5.9.0Stable穩(wěn)定版本。

2022年年底,6.0版本支持95%以上的ES6特性,7.0版本通過flag支持async函數(shù),全面支持99%的ES6特性。

2022年2月,發(fā)布了7.6版本,可以不通過flag使用async函數(shù)。

2022年5月,發(fā)布了8.0版本,支持asyncHooks,N-API等特性。

2022年4月,發(fā)布了10.0版本,新增http2模塊,將npm從v5.7更新到了v6,并且增強(qiáng)了對ESMModules的支持。

2022年10月,發(fā)布了11.0版本,增加了多線程WorkerThreads。

整體上來說,Node.js的開展趨于穩(wěn)定。成立Node.js基金會能夠讓Node.js在未來獲得更好的開源社區(qū)支持;發(fā)布LTS版本意味著Node.jsSDKAPI趨于穩(wěn)定;頻繁發(fā)布版本雖然被很多人詬病,但換個角度來看,這也是社區(qū)活潑的一個體現(xiàn),如果大家真的看了Changelog,便會發(fā)現(xiàn),新版本相比于舊版本只增加了一些小的改良,而且是邊邊角角的改良,也就是說,Node.js的核心代碼已經(jīng)非常穩(wěn)定了,可以大規(guī)模使用。

Node.js在2022年橫空出世,可以說靠異步特性獲得了很大的性能優(yōu)勢。所有語言幾乎沒有能和它相比的。但是福禍相依,因?yàn)樾阅芴霰?,所以促使很多語言、編程模型都紛紛進(jìn)行改良,比方產(chǎn)生了Go語言,比方PHP里的SWoole框架可以支持異步協(xié)程了,再比方鳥哥〔惠新宸〕對PHP的VM進(jìn)行了改良,大家似乎都以不支持異步為恥。后來的故事大家都知道了,各種語言的性能都得到了提高。

則在這種情況下,Node.js還有優(yōu)勢嗎?

在實(shí)現(xiàn)難易度上,Node.js除了異步流程控制稍復(fù)雜外,其他的都非常簡單。比方在寫法上,你可以選擇編寫面向過程、面向?qū)ο蟆⒑瘮?shù)式的程序。不要因?yàn)镹ode.js變化快,就覺得自己跟不上潮流。一般后端程序員轉(zhuǎn)為Node.js開發(fā)人員時,幾乎兩周就能精通,這一點(diǎn)相比其他語言還是很有優(yōu)勢的。

在調(diào)優(yōu)本錢上,Node.js即使不進(jìn)行優(yōu)化,性能也非常好,另外,對Node.js進(jìn)行優(yōu)化也比其他語言更簡單。

在學(xué)習(xí)本錢上,Node.js是有優(yōu)勢的。學(xué)習(xí)其他語言,前后端至少要學(xué)兩種以上,如果學(xué)習(xí)Node.js,你只需要學(xué)會JavaScript即可,可以少學(xué)一種語言。我想問,大前端離得開JavaScript嗎?今日的前端還不夠復(fù)雜嗎?你真的有則多精力學(xué)習(xí)更多語言嗎?

其實(shí)大家可以關(guān)注一下基于npm的開源生態(tài),截至2022年3月,npm上已有超過94.7萬個模塊,秒殺無數(shù)競品。npm是所有開源包管理中最強(qiáng)大的,我們說更了不起的Node.js,其實(shí)npm居功甚偉。

下列圖展示了來自ModuleCounts的各個包管理模塊的差別。

npm生態(tài)是Node.js的優(yōu)勢,可是說Node.js沒有性能優(yōu)勢真的對嗎?這其實(shí)是對Node.js的誤解。Node.js的性能依然很好,不斷迭代的版本其實(shí)就是在提升性能。而且Node.js具有npm極其完善的生態(tài),可謂性能與生態(tài)雙劍合璧,這是無與倫比的。

正因?yàn)楫惒教匦?,Node.jsAPI設(shè)計只能采用錯誤優(yōu)先〔Error-First〕格調(diào)的回調(diào)約定,于是大家硬生生地把多層回調(diào)寫成了回調(diào)地獄〔callbackhell〕,這時就有各種黑粉冒出來對Node.js進(jìn)行攻擊。

但正是因?yàn)榛卣{(diào)地獄是最差的實(shí)踐,所以大家才不得不求變,于是Thunk函數(shù)、Promise/A+標(biāo)準(zhǔn)等相繼出現(xiàn)。雖然Promise/A+標(biāo)準(zhǔn)不是則完美,但對于解決回調(diào)地獄問題來說已經(jīng)足夠。而且Generator特性和Generator的執(zhí)行環(huán)境co模塊也被逐漸引入新的異步解決計劃,使得異步在寫法上越來越接近于同步。當(dāng)async函數(shù)落地的時候,Node.js已經(jīng)站在了同C#、Python一樣的高度上,大家還有什么理由攻擊它呢?

下面列舉了Node.js支持的所有異步解決計劃,并給出了推薦倡議〔5星為最高級別〕。

從推薦指數(shù)可以看出,我們應(yīng)首選async函數(shù),但要注意版本問題,要使用最新的版本。其次就是Promise,它都能非常好地駕馭callback和async函數(shù),尤其是在異常捕獲、擴(kuò)展上,具有明顯的優(yōu)勢。

有時,將一件事做到極致,也許能收獲另一片天地。異步流程控制是Node.js編程的核心,掌握異步流程控制之后,Node.js中就只剩API需要學(xué)習(xí)了,后面會詳細(xì)講解。

自從ES6標(biāo)準(zhǔn)在Node.js中落地之后,整個Node.js開發(fā)領(lǐng)域都發(fā)生了翻天覆地的變化。從v0.10開始,Node.js中就逐漸參加了ES6特性,比方Node.jsv0.12可以使用Generator,這也促使尋求異步流程控制的TJHolowaychuk寫出了co這個馳名的模塊,進(jìn)而產(chǎn)生了Koa框架。但是在v5.0之前,必須通過flag才能開啟Generator支持,因此Koav1.0遲遲未發(fā)布,在Node.jsv5.0發(fā)布后,Koav1.0才發(fā)布。

2022年,傳統(tǒng)寫法終結(jié);2022年,變革寫法開始興起。其中核心變更是支持使用ES6語法編寫Node.js代碼。

可以使用Node.jsv5.x+里的ES6特性,如果想實(shí)現(xiàn)更高級的功能,可以使用Babel編譯支持ES7特性,或者使用TypeScript。

合理使用Standard或者xo模塊代碼格調(diào)約定。

適當(dāng)引入ES6語法,只要Node.jsS

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論