跳到主要内容
Deno 2 终于来了 🎉️
了解更多

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 部署

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

我们正在积极开发和投资 Deno 部署。我们认为它是我们的第三个 JavaScript 运行时;在构建 Node.js 和 Deno CLI 之后。

我们对有机会构建一个现代运行时感到兴奋,该运行时具有以云为中心的基元,可以改变团队构建和交付软件的方式。

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

优化的核心

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

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

op 层的效率是运行时整体性能的关键因素。以前 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 部署的“隔离作为服务”为以下方面提供了坚实的基础

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

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

Node.js 兼容性

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

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

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

通往 Deno 2 的道路

在 2021 年 9 月,我们开始讨论 Deno 2 版本可能是什么样子。有很多显而易见的小 API 更改需要解决,但我们也在研究对 Deno 工作流进行根本性更改。很快我们将发布 Deno 2 的路线图,并希望在今年上半年发布。它将专注于更好的 NPM 生态系统兼容性、更便捷的常见工作流程以及探索替代包管理解决方案。