為什麼需要Deno.js? - DEV

banq發表於2020-05-29

您正在嘗試學習JavaScript。您剛剛對瀏覽器中的JavaScript有所瞭解。然後,突然之間,你遇到Deno 是Node.js殺手之類的炒作。但是您不知道這些是什麼。如果是這樣,請繼續閱讀!

什麼是JavaScript引擎?
您可能知道,JavaScript是一種解釋型程式語言。這意味著在執行之前不會將原始碼編譯成二進位制程式碼。JavaScript引擎可以將JavaScript程式碼即時編譯為可執行的機器程式碼。這就是所謂的即時(JIT)編譯。例如,當您在Google chrome上執行JavaScript時,您的JavaScript引擎為V8。如果在Mozilla上,則為SpiderMonkey。

什麼是JavaScript執行時環境?
通常,您通常不直接使用JavaScript引擎。JavaScript引擎在一個環境中執行,該環境為您的JavaScript應用程式提供了可在執行時使用的其他功能。執行環境是允許與引擎外部環境進行通訊的API。例如,像Google Chrome這樣的網路瀏覽器是一個桌面JavaScript執行時環境,它使用V8 JavaScript引擎並提供DOM API,Fetch API,Storage API等。同樣,諸如Node和Deno之類的伺服器端執行時環境也使用V8引擎,並提供檔案系統訪問,網路訪問,控制檯等。

為什麼我們需要瀏覽器之外的執行環境?
儘管JavaScript的主要環境是Web瀏覽器,但近年來,JavaScript接管了伺服器平臺。
伺服器端JavaScript執行時環境使您可以訪問檔案系統,網路以及Web瀏覽器所不允許的其他內容。實際上,您可以使用僅基於JavaScript的技術堆疊(例如MEANMERN)構建整個Web應用程式(從UI到資料層)。

NodeJS怎麼了?
根據NodeJS的建立者Ryan Dahl的說法,NodeJS在某些方面做錯了。他在JSConf EU 2018上發表了有關此主題的演講

  1. 不信守Promise:NodeJS實際上有本機的Promise支援,但是幾個月後,它被刪除了。因此,NodeJS必須使用變通方法來實現Promise。
  2. 安全:V8本身就是一個非常好的安全沙箱。NodeJS刪除了所有這些安全功能,併為應用程式提供了訪問所有內容的許可權。
  3. 構建系統:Chrome開始將GYP用於構建系統,因此NodeJS也進行了切換。但是後來Chrome放棄了GYP並採用GN作為他們的構建系統,因為它更快,更簡單。根據Ryan Dahl的說法,繼續使用GYP可能是NodeJS核心最大的失敗。
  4. npm和package.json:所有npm軟體包都包含一個檔案,通常在專案根目錄中,名為package.json-該檔案包含與專案相關的各種後設資料。顧名思義,npm或Node Package Manager用來管理專案中的依賴包,從而使您的生活更輕鬆。package.json檔案具有一些不必要的資訊,只有npm登錄檔才需要。Ryan將此描述為“樣板噪聲”,因為它沒有給專案增加任何噪聲。npm是集中式的,由私人控制。如果您已經在瀏覽器中完成了一些專案,您將知道如何連結到依賴項。與JQuery,Bootstrap等類似。您可以將任何連結新增到HTML,並且可以直接使用它。在Node中,您不能在npm之外的任何地方安裝依賴項表單。
  5. 沒有副檔名“ .js”的require("module") :這是您匯入外部庫的方式,這還不夠具體。例如,如果要在專案中安裝JQuery,則應首先使用npm透過install命令將其安裝在專案資料夾中:npm install jquery。然後,如果要在檔案中使用它,則可以在要使用JQuery的檔案中新增“ require()”語句:require("JQuery")。這種整潔的語法起作用所需的演算法非常複雜且效率低下。模組載入器必須在多個位置查詢檔案系統,以猜測使用者的意圖。
  6. node_modules:在專案中安裝依賴項時,它們將下載到“ node_modules”資料夾中。問題是每個專案一個,假設您要建立兩個不同的專案,但是它們都使用JQuery,則可以下載“ JQuery.js”檔案,並將其儲存在共享資料夾中,您可以從兩個專案連結到該資料夾​​。當您準備釋出專案時,只需更改指向遠端檔案的連結併發布它們。您甚至可以將本地檔案重新用於將來的任何專案。這在Node中是不可能的。
  7. index.js:如果未指定,NodeJS將尋找“ index.js”檔案。這是不必要的事情。它不必要地使模組載入系統複雜化。在“ require()”支援package.json之後,它變得特別不必要。

所有這些問題都是NodeJS的核心功能,而試圖解決這些問題將意味著建立一個全新的事物。而且有太多使用NodeJS的程式碼,解決這些問題將與永久性中斷相同。所有舊程式碼都將過時。許多科技巨頭都在使用它,許多創業公司都在使用它,許多開發人員在個人專案中使用它。到處都是!

什麼是Deno?
Deno是一個新的跨平臺執行時環境,就像NodeJS一樣,它基於Google的V8引擎。它是由NodeJS的建立者Ryan Dahl製作的。它的製作目的與NodeJS相同。
與Node(C ++)不同,它是用Rust編寫的,這使它變得更快,更安全。它還具有許多很棒的新功能。

1.TypeScript支援

Deno開箱即用地支援Typescript。您無需設定或配置任何東西。TypeScript是JavaScript的型別化超集,可轉換為普通JavaScript。它是由Microsoft開發的。Typescript新增了許多功能,這些功能使擴充套件JavaScript應用程式變得更加容易,並從一開始就防止將來的錯誤。

2.ES模組匯入語法
Deno使您可以使用ES模組語法從Web匯入,就像在瀏覽器中一樣:

import { bgBlue, red, bold } from "https://deno.land/std/colors/mod.ts";


Deno在第一次獲取依賴項後會對其進行快取。因此,現在您甚至不必使用單獨的本地檔案進行開發。一切都正常。而且可以在專案之間共享快取的依賴項,因此您可以對正在處理的每個專案使用每個依賴項的一個副本。
這一開關功能可以解決整個node_modules問題,使其速度更快,並幫助Deno使用您在各處使用的標準JavaScript。

3.預設安全
預設情況下,如果您在Deno中執行JavaScript檔案,則除了對專案目錄的讀取許可權外,它沒有其他許可權。您必須對要指令碼具有的所有許可權明確表示“是”。它甚至沒有連線到網際網路或本地網路的許可權。您可以控制指令碼要執行的操作。

NodeJs被殺死?
錯誤!有一件事情,仍然使Node保持它的年齡。隨著時間的流逝,Node獲得了很多使用者,學習資源和社群支援。另一方面,Deno最近達到了1.0版里程碑。這意味著它的使用者群很小,學習資源很少,它本身就將JavaScript社群分為兩個部分。
對於Deno,還沒有標準的工作流程和開發堆疊。從谷歌和微軟這樣的技術巨頭轉向全職工作還有很長的路要走。反過來,這意味著沒有與Deno相關的工作,因此,很少有人會嘗試學習它。
因此,阻礙Deno成為NodeKiller的主要因素是使用者群。

如果您不熟悉JavaScript,則一定要先學習NodeJS。將來,如果Deno仍然被證明是NodeKiller,則可以輕鬆切換到Deno。您要做的就是放棄整潔的匯入語法,並開始對自己的工作負責。








 

相關文章