Deno 2021 回顧:優化 Deno 核心、相容 Node.js、Deno 2 路線圖將至

MissD 發表於 2022-01-29
Node.js

近日,Deno 官方部落格對其專案在剛剛過去的 2021 年所發生的重大事件和新變動做了回顧。

Deno 2021 回顧:優化 Deno 核心、相容 Node.js、Deno 2 路線圖將至

作為 Deno 第一筆資金投入的一年,該公司在 2021 裡在 10 個方面有了強大且持續的發展:釋出了 44 個版本(11 個次要,33 個補丁),landing 關鍵特徵,無數 bug 的修復以及在效能方面的顯著優化。

在該部落格文章裡,Deno 對以下幾個主要方面的發展做了探討:

Deno Deploy

2021年夏天,Deno 官方釋出了 Deno Deploy 的第一個測試版 —— 一款由 Deno 工程團隊從頭開始構建的現代 serverless 雲,允許使用者快速地將 JavaScript、TypeScript 和 WASM 服務部署到世界各地的資料中心。

目前,Deno 正在積極開發和投資 Deno Deploy,該專案被認為是繼構建 Node.js 和 Deno CLI 之後該公司的第三個 JavaScript runtime。

優化 Deno 核心

Deno 的核心提供了“opcalls”(類似於syscalls),允許 JavaScript 呼叫 runtime 提供的函式(fs/net/url-parsing/…)。

在 v1.9 版本釋出之前,Deno 公司通過 JSON 和二進位制緩衝區的混合來對opcall 值進行整理。

op-layer 的效率是決定 runtime 整體效能的關鍵指標。相比此前每次呼叫 Opcalls 花費約 4000ns,現在每次呼叫花費僅為約 40ns,減少了近 100 倍。這些效率提高的主要原因是 serde_v8 —— 開發團隊在 v1.9 版本中設計並交付的 Rust 和 V8 值之間的最大化 efficient bijection。

僅此一項就將 URL 解析等常見操作的成本降低了 3 倍以上,並使 Deno 成為一個快速的 JS runtime。

原生 HTTP

在 Deno v1.9 版本中開發團隊提供了原生 HTTP 伺服器繫結,這些繫結後來在 Deno v1.13 中得到了穩定發揮,只需幾行程式碼即可建立由 hyper 支援的高效能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 相容性表格

2021 年 8 月,Deno 被新增到了 MDN 相容性表格中。

Deno 2021 回顧:優化 Deno 核心、相容 Node.js、Deno 2 路線圖將至

Deno 非常重視網路相容性,開發團隊根據 WPT(或 Web 平臺測試)測試 Deno,所有主要瀏覽器都使用該測試套件來確保符合規範。(測試套件結果可在 wpt.fyi 上找到)。

外部函式介面(FFI )

Deno v1.13 版本中,開發團隊用一個新的外部函式介面 API 替換了不穩定的外掛系統。儘管該 FFI 仍被認為不穩定,但團隊認為這是一個顯著的進步。

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

目前,已經看到了一些使用 FFI API 展示 FFI API 強大功能的有趣專案:

Desktop app framework
Python interpreter bindings
SDL2 bindings
SerialPort bindings
SQLite bindings
Slack & 下一代平臺

2021 年 11 月,SLACK 宣佈了其基於 Deno 的下一代開發平臺。除 SLACK 外,Deno 公司還與其他合作伙伴合作生產和運輸了優質的 Deno-powered 產品。Deno 方面相信,Deno Deploy 的“Isolates as a Service(隔離即服務)”為以下方面提供了堅實的基礎:

Modern edge-hosting
User-extendable platforms (bots, plugins, apps, 等...)
Low-code solutions

Node.js 相容性

在 2021 年的 Q4 季度裡,Deno 團隊開始努力提供一流的 Node.js 相容性,允許 Deno 直接在 Deno 中執行為 Node.js 開發的應用程式和庫(NPM 包)。

在 Deno v1.15 版本里,開發團隊釋出了“compat mode”的第一個預覽版。儘管該功能仍不穩定,但可使用 compat flag 啟用(大部分工作涉及在 std/node 中提供 polyfills)。

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

Deno 2 路線

2021 年 9 月份,開發團隊開始討論 Deno 2 發行後將會是什麼樣子。雖然還有許多明顯的小 API 變更需要解決,但團隊也在排查根本性的變化,以改進 Deno 工作流程。

團隊表示,相信 Deno 2 的路線圖很快就會發布,也希望儘量在今年上半年釋出。Deno 2 將專注於更好的 NPM 生態系統相容性、更好的通用工作流 DX,以及更好的探索替代包管理解決方案。

相關文章