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