Deno 2021 回顾:优化 Deno 内核、兼容 Node.js、Deno 2 路线图将至

简介: Deno 2021 回顾:优化 Deno 内核、兼容 Node.js、Deno 2 路线图将至

近日,Deno 官方博客对其项目在刚刚过去的 2021 年所发生的重大事件和新变动做了回顾。

image.png

作为 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 兼容性表格中。

image.png

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,以及更好的探索替代包管理解决方案。

node.js

相关文章
|
1月前
|
存储 缓存 JavaScript
如何优化Node.js应用的内存使用以提高性能?
通过以上多种方法的综合运用,可以有效地优化 Node.js 应用的内存使用,提高性能,提升用户体验。同时,不断关注内存管理的最新技术和最佳实践,持续改进应用的性能表现。
122 62
|
1月前
|
JavaScript 前端开发
如何使用时间切片来优化JavaScript动画的性能?
如何使用时间切片来优化JavaScript动画的性能?
|
27天前
|
存储 缓存 监控
如何使用内存监控工具来优化 Node.js 应用的性能
需要注意的是,不同的内存监控工具可能具有不同的功能和特点,在使用时需要根据具体工具的要求和操作指南进行正确使用和分析。
67 31
|
1月前
|
缓存 前端开发 JavaScript
JavaScript加载优化
JavaScript加载优化
|
1月前
|
缓存 前端开发 JavaScript
优化CSS和JavaScript加载
优化CSS和JavaScript加载
|
1月前
|
缓存 JavaScript 前端开发
介绍一下 JavaScript 中数组方法的常见优化技巧
通过合理运用这些优化技巧,可以提高 JavaScript 中数组方法的执行效率,提升代码的整体性能。在实际开发中,需要根据具体的业务场景和数据特点选择合适的优化方法。
33 6
|
1月前
|
缓存 前端开发 JavaScript
优化CSS和JavaScript加载
Next.js和Nuxt.js在优化CSS和JavaScript加载方面提供了多种策略和工具。Next.js通过代码拆分、图片优化和特定的CSS/JavaScript优化措施提升性能;Nuxt.js则通过代码分割、懒加载、预渲染静态页面、Webpack配置和服务端缓存来实现优化。两者均能有效提高应用性能。
|
1月前
|
JSON 监控 JavaScript
Node.js-API 限流与日志优化
Node.js-API 限流与日志优化
|
1月前
|
Web App开发 JavaScript 前端开发
探索Deno:新一代JavaScript/TypeScript运行时环境
【10月更文挑战第25天】Deno 是一个新兴的 JavaScript/TypeScript 运行时环境,由 Node.js 创始人 Ryan Dahl 发起。本文介绍了 Deno 的核心特性,如安全性、现代化、性能和 TypeScript 支持,以及开发技巧和实用工具。Deno 通过解决 Node.js 的设计问题,提供了更好的开发体验,未来有望进一步集成 WebAssembly,拓展其生态系统。
|
2月前
|
存储 JavaScript 前端开发
JavaScript垃圾回收机制与优化
【10月更文挑战第21】JavaScript垃圾回收机制与优化
41 5