跳到主要内容
Deno 2.4 已发布,带来 deno bundle、字节/文本导入、OTel 稳定版等新功能
了解更多

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。我们将其视为继 Node.js 和 Deno CLI 之后,我们的第三个 JavaScript 运行时。

我们很高兴有机会构建一个具有云优先原语的现代运行时,它将重塑团队构建和发布软件的方式。

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

优化过的核心

Deno 的核心提供了“opcalls”(类似于 syscalls),允许 JavaScript 调用运行时提供的 Rust 函数(例如文件系统/网络/URL 解析等)。

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

操作层的效率是影响运行时整体性能的关键因素。Opcall 之前每次调用约有 4000 纳秒的开销,现在已减少近 100 倍至每次调用约 40 纳秒。

这些效率提升主要得益于 serde_v8,这是我们在 v1.9 中设计和发布的一种在 Rust 和 V8 值之间实现近乎最大效率的双射方案。

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

原生 HTTP

Deno v1.9 中,我们发布了原生 HTTP 服务器绑定,并在 Deno v1.13 中将其稳定化。这些绑定允许您只需几行代码即可创建由 hyper 支持的高性能 HTTP 服务器

import { serve } from "https://deno.land/std@0.140.0/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 中,我们用新的外部函数接口(FFI)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 技术可能适用,请联系 deploy@deno.com

Node.js 兼容性

在 2021 年第四季度,我们开始致力于提供一流的 Node.js 兼容性。这使得 Deno 能够直接运行为 Node.js 开发的应用程序和库(NPM 包),无需修改。

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

一些关键模块如 tlszlib 仍不完整,但以目前的形式,您仍然可以运行一些非简单的应用程序。我们的目标是在未来几个月内推出一个适合所有用户的第一个迭代版本。

Deno 2 之路

2021 年 9 月,我们开始讨论 Deno 2 版本可能的样子。有许多明显的小型 API 更改需要解决,但我们也在研究根本性的变化以改进 Deno 工作流程。我们很快将发布 Deno 2 的路线图,并希望在今年上半年发布它。它将重点关注更好的 NPM 生态系统兼容性、常见工作流程的更好开发者体验(DX)以及探索替代的包管理解决方案。