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

相关文章
|
30天前
|
JavaScript 关系型数据库 MySQL
❤Nodejs 第六章(操作本地数据库前置知识优化)
【4月更文挑战第6天】本文介绍了Node.js操作本地数据库的前置配置和优化,包括处理接口跨域的CORS中间件,以及解析请求数据的body-parser、cookie-parser和multer。还讲解了与MySQL数据库交互的两种方式:`createPool`(适用于高并发,通过连接池管理连接)和`createConnection`(适用于低负载)。
24 0
|
30天前
|
缓存 编解码 JavaScript
在JavaScript小游戏开发中,如何优化游戏性能,比如减少重绘、提高动画流畅度?
提升JavaScript游戏性能的关键点包括:使用requestAnimationFrame优化动画流畅度;减少DOM操作,利用DocumentFragment或虚拟DOM;使用Canvas/WebGL高效渲染;优化图像资源,压缩图片和使用雪碧图;分层渲染与视口裁剪减少无效绘制;借助Web Workers进行后台计算;缓存计算结果;合理添加事件监听器并采用事件委托;定期进行性能分析以找到并解决瓶颈。不断测试与调整是优化的关键。
33 4
|
30天前
|
前端开发 JavaScript 安全
从前端性能优化角度谈JavaScript代码压缩与混淆
本文从前端性能优化的角度出发,探讨了JavaScript代码压缩与混淆的重要性及实现方式,通过分析不同压缩混淆工具的特点和效果,为开发者提供了实用的指导和建议。
|
30天前
|
Web App开发 JavaScript 前端开发
JavaScript 性能优化:介绍一种JavaScript代码的优化方法。
JavaScript 性能优化:介绍一种JavaScript代码的优化方法。
31 1
|
30天前
|
JSON JavaScript 前端开发
Webpack【Webpack图片处理、Webpack中proxy代理 、自动清理dist、Webpack优化、JavaScript中的代码检查】(三)-全面详解(学习总结---从入门到深化)(下)
Webpack【Webpack图片处理、Webpack中proxy代理 、自动清理dist、Webpack优化、JavaScript中的代码检查】(三)-全面详解(学习总结---从入门到深化)
58 2
|
16天前
|
缓存 前端开发 JavaScript
基于JavaScript的前端性能优化技术探讨
基于JavaScript的前端性能优化技术探讨
27 1
|
30天前
|
JavaScript 前端开发 IDE
【JavaScript与TypeScript技术专栏】使用TypeScript优化JavaScript应用性能
【4月更文挑战第30天】本文探讨了如何使用TypeScript优化JavaScript应用性能。TypeScript通过静态类型检查、更好的编译器优化和IDE支持提升代码稳定性和开发效率。利用类型注解、泛型、类与继承以及枚举和常量,开发者能构建高效、灵活和健壮的代码。逐步将TypeScript引入现有JavaScript项目,并通过案例分析展示性能提升效果。随着TypeScript社区的发展,它将在Web开发性能优化中扮演更重要角色。
|
8月前
|
前端开发 JavaScript 调度
带你读《现代Javascript高级教程》三十一、requestAnimationFrame:优化动画和渲染的利器(2)
带你读《现代Javascript高级教程》三十一、requestAnimationFrame:优化动画和渲染的利器(2)
|
30天前
|
JavaScript 前端开发
在JavaScript中,如何优化原型链的性能?
在JavaScript中,如何优化原型链的性能?
21 2
|
9月前
|
存储 JavaScript 前端开发
从 V8 优化看高效 JavaScript
从 V8 优化看高效 JavaScript
55 0