Deno 2021 回顾:优化核心、兼容 Node.js、正在准备 Deno 2

来源: OSCHINA
编辑: 局长
2022-01-27 08:38:34

Deno 官方博客回顾了项目在 2021 年发生的重大事件和新增的重要功能。博客提到,Deno 在 2021 年发布了 44 个版本(11 个小版本更新,33 个补丁更新),新增了许多重要功能,修复了大量错误,以及优化性能。


Deno Deploy

2021 年夏天,Deno Deploy 发布了首个 Beta 版本,这是由 Deno 团队从头开始构建的现代 serverless 云,用户可以使用它非常快速地将 JavaScript、TypeScript 和 WASM 服务部署到世界各地的数据中心。

优化 Deno 核心

Deno 核心提供了 "opcalls" 功能(与 syscalls 类似,又名),此功能允许 JavaScript 调用 runtime(fs/net/url-parsing/...) 提供的 Rust 函数。在 1.9 版本发布之前,开发者通过混合使用 JSON 和二进制缓冲区对 opcall 值进行编组。

op-layer 的效率是决定 runtime 整体性能的一个关键因素。opcalls 以前每次调用有 4000ns 的开销,现在减少至原来的大约 1%,每次调用仅需 40ns。这些效率提升大部分得益于 serde_v8,这是开发团队在 v1.9 版本中设计并交付的 Rust 和 V8 值之间的最大化 efficient bijection。

开发团队通过此功能将 URL 解析等常见操作的开销降低了 3 倍以上,并使 Deno 成为成熟快速的 JavaScript runtime。

更多介绍可查看 Deno 1.9 发布说明

原生 HTTP

在 Deno 1.9 中,开发团队发布了原生 HTTP 服务器绑定,此功能后来在 Deno 1.13 进入稳定状态。使用这些绑定只需几行代码即可创建高性能的 hyper HTTP 服务器,因为这些绑定构建在hyper上,它们提供了巨大的吞吐量。

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 Compatibility Tables

Deno on MDN

2021 年 8 月,Deno 被添加到 MDN compatibility tables

外部函数接口 (Foreign Function Interface)

在 Deno v1.13 中,开发团队用新的 Foreign Function Interface API 替换了不稳定的插件系统。虽然 FFI 尚处于不稳定阶段,但这是一个显著的改进。

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

目前已经诞生了部分使用 FFI API 的有趣项目,展示了 FFI API 的强大功能。

Slack & 下一代平台

2021 年 11 月,Slack 宣布了其基于 Deno 的下一代开发平台。Deno 团队表示,Deno Deploy 的“隔离即服务”为以下方面提供了坚实的基础:

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

Node.js 兼容性

在 2021 年第四季度,Deno 团队开始努力提供一流的 Node.js 兼容性,允许 Deno 直接在 Deno 中运行为 Node.js 开发的应用程序和库(NPM 包)。在 Deno v1.15 中,团队发布了"compat mode"的第一个预览版。虽然此功能仍然不稳定,但可以使用 --compat标志启用。大部分工作涉及到在 std/node 中提供 polyfills。

一些关键模块如tlszlib仍然不完整,但在目前的形式下,仍然可以运行 non-trivial 类型的应用程序。团队表示目标是在未来几个月内推出适合所有用户的第一个迭代版本。

Deno 2

对于 Deno 2,团队表示将会解决许多小的 API 变化,以及优化 Deno 的工作流。他们很快就会发布 Deno 2 的路线图,并希望在今年的上半年推出。Deno 将专注于提供更好的 NPM 生态兼容性,为常见的工作流程提供更好的 DX,并探索替代的包管理解决方案。

点此查看原文

展开阅读全文
精彩评论
deno的包管理跟nodejs 完全不一样,权限策略等等根本不是一个东西,现在又要兼容,那我为什么不直接用nodejs呢?兼容nodejs是一个错误的决定,只会更没人用
2022-01-27 12:36
7
举报
deno作者终于想通了,要兼容nodejs生态了。没有杀手级应用,没有社区生态,怎么吸引开发者去用一个还没有稳定的新语言。
2022-01-27 09:25
5
举报
不一定,node 死了,很多人宁可选择 dart 或者 kotlin。 deno 的 url 依赖真的不知道咋想的。
2022-01-28 20:45
3
举报
以前玩过一阵,最后还是坚持使用go做web开发的
2022-01-27 09:32
2
举报
这不是语言是运行环境,可以理解为开发框架
2022-01-27 12:33
1
举报
4 收藏
分享
18 评论
4 收藏
分享
返回顶部
顶部
返回顶部
顶部