Deno 2021 回顧:優化核心、相容 Node.js、正在準備 Deno 2

2022-01-27 09:00:15

Deno 官方部落格了專案在 2021 年發生的重大事件和新增的重要功能。部落格提到,Deno 在 2021 年釋出了 44 個版本(11 個小版本更新,33 個修補程式更新),新增了許多重要功能,修復了大量錯誤,以及優化效能。


Deno Deploy

2021 年夏天, 釋出了首個 Beta 版本,這是由 Deno 團隊從頭開始構建的現代 serverless 雲,使用者可以使用它非常快速地將 JavaScript、TypeScript 和 WASM 服務部署到世界各地的資料中心。

優化 Deno 核心

Deno 核心提供了 "opcalls" 功能(與 syscalls 類似,又名),此功能允許 JavaScript 呼叫 runtime(fs/net/url-parsing/...) 提供的 Rust 函數。在 1.9 版本釋出之前,開發者通過混合使用 JSON 和二進位制緩衝區對 opcall 值進行編組。

op-layer 的效率是決定 runtime 整體效能的一個關鍵因素。opcalls 以前每次呼叫有 4000ns 的開銷,現在減少至原來的大約 1%,每次呼叫僅需 40ns。這些效率提升大部分得益於 serde_v8,這是開發團隊在 v1.9 版本中設計並交付的 Rust 和 V8 值之間的最大化 efficient bijection。

開發團隊通過此功能將 URL 解析等常見操作的開銷降低了 3 倍以上,並使 Deno 成為成熟快速的 JavaScript runtime。

 HTTP 伺服器,因為這些繫結構建在上,它們提供了巨大的吞吐量。

import { serve } from "https://deno.land/[email protected]/http/server.ts";
serve((_req) => new Response("Hello, world"), { port: 3000 });
console.log("Listening on http://localhost:3000");

MDN Compatibility Tables

外部函數介面 (Foreign Function Interface)

在  中,開發團隊用新的 Foreign Function Interface API 替換了不穩定的外掛系統。雖然 FFI 尚處於不穩定階段,但這是一個顯著的改進。

1.13 之前的原生外掛系統允許釋出用 Rust 編寫的動態庫。由於 Rust ABI 不穩定,以及將 API 作者限制為單一語言,Deno 團隊決定使用通用的 FFI API 替換此係統。該 API 允許開發者以任何使用 C 呼叫約定的語言為 Deno runtime 編寫「擴充套件」。

目前已經誕生了部分使用 FFI API 的有趣專案,展示了 FFI API 的強大功能。

Slack & 下一代平臺

2021 年 11 月,Slack 宣佈了其基於 Deno 的下一代開發平臺。Deno 團隊表示,Deno Deploy 的「隔離即服務」為以下方面提供了堅實的基礎:

  • 現代邊緣託管
  • 使用者可延伸平臺(機器人、外掛、應用程式等...)
  • 低程式碼解決方案

Node.js 相容性

在 2021 年第四季度,Deno 團隊開始努力提供一流的 Node.js 相容性,允許 Deno 直接在 Deno 中執行為 Node.js 開發的應用程式和庫(NPM 包)。在  中,團隊釋出了"compat mode"的第一個預覽版。雖然此功能仍然不穩定,但可以使用 --compat標誌啟用。大部分工作涉及到在  中提供 polyfills。

一些關鍵模組如tlszlib仍然不完整,但在目前的形式下,仍然可以執行 non-trivial 型別的應用程式。團隊表示目標是在未來幾個月內推出適合所有使用者的第一個迭代版本。

Deno 2

對於 Deno 2,團隊表示將會解決許多小的 API 變化,以及優化 Deno 的工作流。他們很快就會發布 Deno 2 的路線圖,並希望在今年的上半年推出。Deno 將專注於提供更好的 NPM 生態相容性,為常見的工作流程提供更好的 DX,並探索替代的包管理解決方案。

展開閱讀全文