跳到主要内容

Deno 在 2021 年

2021 年是 Deno 获得资助的全面发展的第一年。 我们的公司 拥有 10 名成员,并且还在成长。

自从 2020 年 5 月发布 1.0 版本 以来,Deno CLI 一直在稳步发展。2021 年,我们发布了 44 个版本(11 个次要版本,33 个补丁版本),实现了关键功能、无数的错误修复和显着的性能优化。有关每个版本的详细信息,请参阅相应的博客文章:v1.7v1.8v1.9v1.10v1.11v1.12v1.13v1.14v1.15v1.16v1.17

让我们探索一些主要发展

Deno Deploy

去年夏天,我们发布了 Deno Deploy 的首个 Beta 版本。这是一个由我们的工程团队从头开始构建的现代无服务器云平台,允许用户非常快速地将 JavaScript、TypeScript 和 WASM 服务部署到世界各地的数据中心。

我们正在积极开发 Deno Deploy 并对其进行投资。我们将其视为我们的第三个 JavaScript 运行时;继构建 Node.js 和 Deno CLI 之后。

我们对有机会构建一个具有云优先原语的现代运行时感到兴奋,这将塑造团队构建和交付软件的方式。

我们希望在未来几个月内分享更多关于这个下一代系统的信息。

一个优化的核心

Deno 的核心提供 “opcalls”(类似于 syscalls),允许 JavaScript 调用运行时提供的 Rust 函数 (fs/net/url-parsing/…)。

v1.9 之前,我们通过 JSON 和二进制缓冲区的混合方式来编组 opcall 值。

op-layer 的效率是运行时整体性能的关键贡献因素。以前,Opcalls 每次调用有约 4000ns 的开销,现在减少了近 100 倍,降至每次调用约 40ns。

这些效率提升的大部分归功于 serde_v8,这是我们在 v1.9 中设计和发布的 Rust 和 V8 值之间的一种近乎最大效率的双射。

仅此一项就将常见操作(其他方面保持不变)的成本降低了 3 倍以上,例如 URL 解析,并使 Deno 能够成熟为一个快速的 JS 运行时。

原生 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 });

由于这些绑定构建在 hyper 之上,因此它们提供了出色的吞吐量和延迟。

MDN 兼容性表

2021 年 8 月,Deno 被添加到 MDN 兼容性表 中。

MDN compat table for TextEncoderStream

Deno 非常重视 Web 兼容性;我们使用 WPT(或 Web Platform Tests)对 Deno 进行测试,这是一个所有主要浏览器都使用的测试套件,以确保符合规范。测试套件结果可以在 wpt.fyi 上找到。

外部函数接口

Deno v1.13 中,我们用新的外部函数接口 API 替换了不稳定的插件系统。FFI 仍然被认为是不稳定的,但我们认为这是一个重大的改进。

在 1.13 之前,原生插件系统允许发布用 Rust 编写的动态库。由于 Rust ABI 不稳定,以及将 API 作者限制为单一语言,我们决定用通用的 FFI API 替换该系统。这个 API 允许开发人员使用任何使用 C 调用约定的语言为 Deno 运行时编写“扩展”。

我们已经看到一些使用 FFI API 的有趣项目,展示了 FFI API 的强大功能。

Slack 和下一代平台

2021 年 11 月,Slack 宣布了其构建在 Deno 之上的 下一代开发平台。除了 Slack 之外,我们还与其他合作伙伴合作,构建和交付出色的 Deno 驱动的产品。我们认为 Deno Deploy 的 “Isolates as a Service” 为以下方面提供了坚实的基础

  • 现代边缘托管
  • 用户可扩展平台(机器人、插件、应用等……)
  • 低代码解决方案

如果你正在构建类似的产品,并且认为 Deno 技术可能适合,请联系 [email protected]

Node.js 兼容性

在 2021 年第四季度,我们开始努力提供一流的 Node.js 兼容性。允许 Deno 直接在 Deno 中运行为 Node.js 开发的应用程序和库(NPM 包),而无需更改。

Deno v1.15 中,我们发布了“兼容模式”的第一个预览版。该功能仍然不稳定,但可以使用 --compat 标志启用。大部分工作涉及在 std/node 中提供 polyfill。

一些关键模块(如 tlszlib)仍未完成,但在目前的形式下,你仍然可以运行重要的应用程序。我们的目标是在未来几个月内发布第一个适合所有用户的迭代版本。

通往 Deno 2 的道路

在 2021 年 9 月,我们开始讨论 Deno 2 版本可能是什么样子。有许多明显的、小的 API 更改应该解决,但我们也在研究 фундаментальные 更改,以改进 Deno 工作流程。很快,我们将发布 Deno 2 的路线图,并希望在今年上半年发布。它将侧重于更好的 NPM 生态系统兼容性、常见工作流程的更好 DX 以及探索替代的包管理解决方案。