經過兩年的發展
重要的版本號碼與 Deno 命名空間中 API 的穩定性相關,這些 API 負責應用程式與作業系統的互動。目前已有的軟體介面
創建新 JavaScript 平台的主要動機是希望消除概念錯誤,
主要的
- 面向安全的預設配置。 預設情況下停用文件訪問、網路和對環境變數的訪問,必須明確啟用。 應用程式預設運行在隔離的沙箱環境中,在未授予明確權限的情況下無法存取系統功能;
- 除了 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