Deno 2021 回顾:优化 Deno 内核、兼容 Node.js、Deno 2 路线图将至
近日,Deno 官方博客对其项目在刚刚过去的 2021 年所发生的重大事件和新变动做了回顾。
作为 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/std@0.121.0/http/server.ts";
serve((_req) => new Response("Hello, world"), { port: 3000 });
console.log("Listening on http://localhost:3000");
MDN 兼容性表格
2021 年 8 月,Deno 被添加到了 MDN 兼容性表格中。
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,以及更好的探索替代包管理解决方案。
想成为前端大佬?
测一测你的段位