Node.js 的作者提出了安全的 JavaScript 平台 Deno 1.0

經過兩年的發展 提出了 第一個主要版本 迪諾1.0,一個用於獨立執行 JavaScript 和 TypeScript 應用程式的平台,可用於建立在伺服器上執行的處理程序。該平台由 Ryan Dahl 開發(瑞安·達爾(Ryan Dahl)),Node.js 的創建者。與 Node.js 一樣,Deno 使用 JavaScript 引擎 V8,它也用於基於 Chromium 的瀏覽器。同時,Deno 並不是 Node.js 的分支,而是從頭開始創建的新專案。專案程式碼 分發者 根據麻省理工學院的許可。組件 準備好了 適用於 Linux、Windows 和 macOS。

重要的版本號碼與 Deno 命名空間中 API 的穩定性相關,這些 API 負責應用程式與作業系統的互動。目前已有的軟體介面 不穩定,預設隱藏,僅在“--unstable”模式下運行時可用。隨著新版本的形成,此類API將逐漸趨於穩定。全域命名空間中的API包含setTimeout()、fetch()等常用函數,盡可能接近傳統網頁瀏覽器的API,並且依照瀏覽器的Web標準進行開發。 Rust 提供的直接在平台程式碼中使用的 API,以及為 Deno 運行時開發插件的接口,目前還沒有穩定下來,還在繼續開發。

創建新 JavaScript 平台的主要動機是希望消除概念錯誤, 承認 Node.js架構中,提供使用者更安全的環境。為了提高安全性,V8 引擎是用 Rust 編寫的,這避免了許多由低階記憶體操作引起的漏洞,例如釋放後存取、空指標取消引用和緩衝區溢位。平台用於以非阻塞方式處理請求 東京,也是用 Rust 寫的。 Tokio 可讓您建立基於事件驅動架構的高效能應用程序,支援多執行緒並以非同步方式處理網路請求。

主要的 產品特點 德諾:

  • 面向安全的預設配置。 預設情況下停用文件訪問、網路和對環境變數的訪問,必須明確啟用。 應用程式預設運行在隔離的沙箱環境中,在未授予明確權限的情況下無法存取系統功能;
  • 除了 JavaScript 之外,也內建了 TypeScript 的支援。標準 TypeScript 編譯器用於檢查類型並產生 JavaScript,與 V8 中的 JavaScript 解析相比,這會導致效能下降。未來,我們計劃準備自己的 TypeScript 類型檢查系統實現,這將使 TypeScript 處理效能提高一個數量級;
  • 運行時以單一獨立可執行檔(“deno”)的形式出現。 要使用 Deno 運行應用程式就足夠了 上載 其平台有一個可執行文件,大小約為20 MB,沒有外部依賴性,不需要在系統上進行任何特殊安裝。而且,deno 不是一個單體應用程序,而是 Rust 中 crate 套件的集合(deno_core, 生鏽_v8),可以單獨使用;
  • 啟動程式以及載入模組時,可以使用 URL 尋址。 例如,要執行welcome.js程序,您可以使用指令「deno https://deno.land/std/examples/welcome.js」。 來自外部資源的程式碼被下載並快取在本機系統上,但永遠不會自動更新(更新需要使用“--reload”標誌明確運行應用程式);
  • 在應用程式中透過HTTP高效處理網路請求;該平台專為創建高效能網路應用程式而設計;
  • 能夠建立可以在 Deno 和常規 Web 瀏覽器中執行的通用 Web 應用程式;
  • 可用性 標準模組集,其使用不需要綁定外部相依性。標準集合中的模組已經過額外的審核和相容性測試;
  • 除了執行時間之外,Deno 平台還充當套件管理器,可讓您透過程式碼內的 URL 存取模組。 例如,要載入模組,您可以在程式碼中指定“import * as log from “https://deno.land/std/log/mod.ts”。 透過 URL 從外部伺服器下載的檔案會被快取。 綁定到模組版本是透過在 URL 中指定版本號來確定的,例如,「https://unpkg.com/[電子郵件保護]/dist/liltest.js";
  • 該結構包括一個整合的依賴性檢查系統(“deno info”命令)和一個程式碼格式化實用程式(deno fmt);
  • 所有應用程式腳本都可以合併到一個 JavaScript 檔案。

與 Node.js 的差別:

  • Deno 不使用 npm 套件管理器
    並且不依賴儲存庫,模組透過 URL 或檔案路徑進行尋址,模組本身可以放置在任何網站上;
  • Deno 不使用「package.json」來定義模組;
  • API 差異,Deno 中的所有非同步操作都會傳回一個 Promise;
  • Deno 要求明確定義檔案、網路和環境變數的所有必要權限;
  • 處理程序未提供的所有錯誤都會導致應用程式終止;
  • Deno 使用 ECMAScript 模組系統,不支援 require();
  • Deno 的內建 HTTP 伺服器是用 TypeScript 編寫的,運行在本機 TCP 套接字之上,而 Node.js HTTP 伺服器是用 C 編寫的,並提供 JavaScript 的綁定。 Deno 的開發人員專注於優化整個 TCP 套接字層並提供更通用的介面。 Deno HTTP Server 提供較低的吞吐量,但保證可預測的低延遲。例如,在測試中,一個基於 Deno HTTP 伺服器的簡單應用程式能夠每秒處理 25 萬個請求,最大延遲為 1.3 毫秒。在 Node.js 中,類似的應用程式每秒處理 34 個請求,但延遲範圍為 2 到 300 毫秒。
  • Deno 與 Node.js (NPM) 的套件不相容,但正在單獨開發 夾層 為了與標準 Node.js 函式庫相容,隨著它的發展,越來越多為 Node.js 編寫的應用程式將能夠在 Deno 中運行。
  • 來源: opennet.ru

添加評論