新聞中心
本文轉(zhuǎn)載自公眾號(hào)“讀芯術(shù)”(ID:AI_Discovery)

為了解決Node的許多缺點(diǎn),NodeJS的開(kāi)發(fā)者 Ryan Dahl,發(fā)布了一個(gè)新的運(yùn)行時(shí)刻。
人們最初的反應(yīng)可能是:“太棒了,另一個(gè)Javascript框架?正是我需要的?!惫P者也有過(guò)同樣的反應(yīng)。在了解其優(yōu)點(diǎn)之后,筆者更清晰地明白了為什么說(shuō)Deno正是年后端Javascript開(kāi)發(fā)人員所需要的。
相較Node而言,一起看看JavaScript開(kāi)發(fā)人員使用Deno體驗(yàn)更流暢和更現(xiàn)代的五大原因。
1.Modern Javascript —ES 模塊
如果你也是個(gè)React開(kāi)發(fā)人員,那么應(yīng)該已經(jīng)注意到了,在使用NodeJS時(shí)導(dǎo)入包的語(yǔ)法是不同的。這是因?yàn)镹ode是在2009年開(kāi)發(fā)的,從那時(shí)起,針對(duì)Javascript進(jìn)行了很多更新和改進(jìn)。
在React(和Deno)中,使用現(xiàn)代的import package from 'package'語(yǔ)句,而在Node中,使用const package = require("package")語(yǔ)句。
ES模塊導(dǎo)入的優(yōu)越性源于兩個(gè)方面:
- 通過(guò)import,可以有選擇地僅從包中加載所需的片段,這樣可以節(jié)省內(nèi)存。
- 加載與require同步,而import異步加載模塊,這提高了性能。
2. 頂級(jí)await —在異步函數(shù)之外使用 await
在Node中,await關(guān)鍵字只能在異步函數(shù)中訪問(wèn)。但是在Deno中,不論在何地,面對(duì)什么對(duì)象,都可以使用await,而無(wú)需將其打包為異步函數(shù)。
幾乎所有的Javascript應(yīng)用程序都包含許多異步函數(shù)。這次升級(jí)使代碼更加干凈和簡(jiǎn)單。
3. 分散式包
圖源:unsplash
有了Deno,就不必依賴于NPM。我們不再需要package.json了,每個(gè)包都是從URL上加載的。
在NodeJS中,要使用包,就必須先從NPM安裝:
- npm i moment
等待安裝,然后將其包含在應(yīng)用程序中:
- const moment = require("moment")
此外,不論何時(shí),如果有人想在本地運(yùn)行NodeJS 庫(kù),就必須得從NPM安裝所有依賴項(xiàng)。在Deno中,包是從URL中導(dǎo)入的,所以如果想要使用moment,只需導(dǎo)入網(wǎng)址:
https://deno.land/x/moment/moment.ts.
在包的方面,Deno另一個(gè)巨大的優(yōu)勢(shì),在于每個(gè)包在安裝后都緩存在硬盤上,這意味著一個(gè)包的安裝只發(fā)生一次。如果要在任何位置再次導(dǎo)入依賴項(xiàng),則無(wú)需再次下載。
4. TypeScript在本機(jī)工作,無(wú)需配置。
讓TypeScript與NodeJS一起工作需要多個(gè)步驟。讀者必須安裝typescript,升級(jí)package.json和tsconfig.json,并確保模塊支持@types。
在Deno中,所有需要做的就是將文件后綴保存為.ts而不是.js,TypeScript編譯器已經(jīng)內(nèi)置。
5. 訪問(wèn)瀏覽器API (Window, Fetch)
要在Javascript中發(fā)出HTTP請(qǐng)求,可以使用Fetch API。在NodeJS中,沒(méi)有訪問(wèn)瀏覽器API的權(quán)限,因此不能本地調(diào)用fetch函數(shù)。必須首先安裝包:
- npm i node-fetch
然后導(dǎo)入包:
- const fetch =require("node-fetch")
只有這樣才能調(diào)用fetch函數(shù)。
而本地Deno就有權(quán)訪問(wèn)對(duì)象,這意味著讀者可以無(wú)需安裝任何庫(kù),直接調(diào)用fetch("https://something.com"),以及瀏覽器API中的任何內(nèi)容。當(dāng)與頂層await優(yōu)勢(shì)結(jié)合,你可以看出,Deno代碼比Node代碼簡(jiǎn)潔了多少:
2020年編寫(xiě)Javascript代碼的方式
不止于此,Deno還有很多其他的優(yōu)點(diǎn),比如在默認(rèn)情況下更安全,可以執(zhí)行Wasm二進(jìn)制文件,有許多內(nèi)置庫(kù),等等。
圖源:unsplash
文中所提到的要點(diǎn)都是互相關(guān)聯(lián)的,共同組成了一個(gè)更為現(xiàn)代的2020后端JavaScript運(yùn)行時(shí)刻。作為一個(gè)React開(kāi)發(fā)人員,筆者更偏愛(ài)Deno。
現(xiàn)在,筆者可以使用import語(yǔ)句,不論何處都可以使用 await,無(wú)需任何配置就可以使用TypeScript,甚至無(wú)需安裝包就可以調(diào)用fetch。一切都很簡(jiǎn)單。
另一個(gè)問(wèn)題是,Deno最終會(huì)取代Node嗎?或許吧,但可能需要幾年時(shí)間。NodeJS生態(tài)系統(tǒng)很龐大,Deno需要時(shí)間來(lái)趕上。但趨勢(shì)就是Deno正變得更受歡迎,如果你正要開(kāi)始一個(gè)新項(xiàng)目,不妨試試它。
網(wǎng)站名稱:DenoVSNode:Javascript開(kāi)發(fā)人員更喜歡前者的五大原因
轉(zhuǎn)載注明:http://m.5511xx.com/article/copghjh.html


咨詢
建站咨詢
