← 返回信息流
AI 资讯Hacker News·2 小时前

Deno 2.9 发布

原标题:Deno 2.9

速览

Deno 2.9 版本已正式发布。该版本带来了多项更新和改进,旨在提升开发体验和性能。

AI 深度解读

Deno 2.9 深度解读:原生桌面应用、性能飞跃与 Node 兼容性的全面升级

Deno 2.9 版本现已发布,此次更新不仅引入了备受期待的 deno desktop 模块,让开发者能够基于现有的 Web 技术栈构建原生桌面应用,还大幅提升了启动速度、内存效率以及 HTTP 吞吐量。同时,该版本在 Node.js 兼容性方面取得了显著进展,使得从 Node.js 迁移至 Deno 变得前所未有的简单。

背景

长期以来,使用 Web 技术栈(HTML/CSS/JS)构建桌面应用程序往往意味着需要引入 Electron 或 Tauri 等框架,配置复杂的外部工具链,并最终打包出一个与项目其余部分关联度较低的大型二进制文件。这种模式虽然成熟,但增加了项目的复杂性和维护成本。

与此同时,随着 Node.js 生态的持续演进,许多开发者希望利用 Deno 的安全特性和现代化体验,但面临迁移门槛高、依赖管理不一致等问题。Deno 团队意识到,降低迁移成本并赋予 Web 开发者构建原生应用的能力,是扩大 Deno 生态影响力的关键。因此,Deno 2.9 聚焦于解决这两个核心痛点:提供轻量级的原生桌面开发体验,以及无缝对接现有的 Node.js 项目。

核心内容

1. deno desktop:原生桌面应用的新范式

Deno 2.9 最大的亮点是引入了实验性的 deno desktop 模块。它允许开发者使用熟悉的 Web 技术栈构建原生桌面应用,无需 Electron 的样板代码,最终产物是一个单一的可执行二进制文件。

核心特性:

  • 单一入口与自动检测:开发者只需指向一个脚本或 Web 框架项目,deno desktop 即可生成原生应用。它支持自动检测当前目录中的 Web 框架(如 Next.js, Astro, Fresh, Remix, Nuxt, SvelteKit, SolidStart, TanStack Start 和 Vite SSR),并自动构建和包装结果。
  • 无缝集成:在桌面入口点中使用 Deno.serve() 时,它会自动绑定到 WebView 打开的端口,无需手动配置端口映射。
  • 原生 API 支持:运行时内置了丰富的原生桌面 API(Deno.*),无需额外依赖:
    • Deno.BrowserWindow:提供对窗口大小、位置、可见性、菜单和 DevTools 的程序化控制,并支持通过 window.bind() 在 WebView 和 Deno 逻辑之间建立桥梁。
    • Deno.Tray:支持系统托盘图标和面板。
    • Deno.Dock:支持 macOS 的 Dock 集成。
    • 原生对话框:prompt()alert()confirm() 渲染为原生对话框。
    • Deno.autoUpdate():内置轮询自动更新器,可在后台应用二进制补丁。
  • 后端选择
    • WebView(默认):使用操作系统内置引擎(Windows 为 WebView2,macOS/Linux 为 WebKit)。二进制文件体积小,启动快,但渲染效果取决于宿主系统。
    • CEF:通过 Chromium 嵌入式框架捆绑 Chromium。虽然增加了数十 MB 的体积和构建时的下载需求,但保证了跨平台渲染的一致性和最新的 Web 平台特性。
  • 分发与跨平台编译
    • 输出格式遵循 --output 参数指定的扩展名(macOS 的 .app/.dmg,Windows 的 .exe/.msi,Linux 的 .AppImage/.deb/.rpm)。
    • 支持通过 --target 进行交叉编译,甚至可以通过 --all-targets 一次性构建所有支持的平台(Linux x64/arm64, Windows x64, macOS x64/arm64)。
    • Windows .msi 和 Linux .deb/.rpm 安装程序由纯 Rust 编写,无需特定平台的打包工具链。
    • 可选 --compress 标志,将运行时和 UI 后端作为自解压包分发,首次启动时解压。

2. 极致的性能提升

Deno 2.9 在启动时间、内存使用和 HTTP 吞吐量方面带来了广泛的性能改进。基准测试显示,在并发量为 100 的情况下:

  • 启动速度:冷启动时间减半。Hello World 程序的冷启动时间从 34ms 降至 17ms。这得益于将 node: 全局变量从快照中懒加载、将 Node 引导过程限制在 Node worker 中、为残留的懒加载 ESM 模块提供 V8 代码缓存,以及 macOS 上的链式修复。
  • 内存效率:这是本周期最显著的改进。在 2.8 版本中,驻留集大小(RSS)随工作负载增长(从 94 MB 到 197 MB)。在 2.9 中,无论服务器负载如何,内存占用基本保持在 62 MB 左右。这意味着在处理 1 MiB 响应体时,峰值 RSS 降低了 3.1 倍(从 197 MB 降至 63 MB),允许同一机器运行更多并发实例。
  • HTTP 吞吐量Deno.serve 在所有工作负载下均更快。真实世界负载提升 1.27 倍,纯文本提升 1.11 倍,1 MiB 响应体提升 1.18 倍。这得益于新的 Deno 自有 HTTP/1.1 服务路径,以及将 crypto.subtleconsole/Deno.inspect 等热路径从 JavaScript 迁移至 Rust。

3. 增强的 Node.js 兼容性与迁移体验

Deno 2.9 致力于降低从 Node.js 迁移的门槛:

  • Lockfile 直接读取deno install 现在可以直接读取 npmpnpmyarnBun 的 lockfiles。这意味着切换包管理器只需几条命令,而无需进行复杂的迁移。
  • Node.js 26 兼容性:提升了对较新 Node.js 版本的兼容性支持。

4. CSS Module Imports

Deno 2.9 支持使用导入属性将 CSS 文件导入为可构造样式表(Constructable Stylesheets),符合 CSS 模块脚本 Web 标准:

import sheet from "./styles.css" with { type: "css" };
document.adoptedStyleSheets = [sheet];

这将评估为一个 CSSStyleSheet 实例,使得相同代码无需打包步骤即可在 Deno 和浏览器中运行。该功能在 2.9 中通过 --unstable-raw-imports 标志启用。

关键要点

  • 原生桌面开发简化deno desktop 提供了无需 Electron 样板代码的原生桌面应用构建方案,支持自动框架检测和单一二进制分发。
  • 性能显著优化:冷启动时间减半,内存占用大幅降低(峰值 RSS 降低 2-3 倍),HTTP 吞吐量提升 10%-27%。
  • 迁移成本极低deno install 直接兼容 npm/pnpm/yarn/Bun 的 lockfiles,使得从 Node.js 迁移变得极其简单。
  • 跨平台构建能力:支持通过单一命令交叉编译至 Windows、macOS 和 Linux,且安装程序由纯 Rust 编写,简化了 CI/CD 流程。
  • Web 标准对齐:支持 CSS 模块导入(Constructable Stylesheets),实现了 Deno 与浏览器环境的代码一致性。
  • 后端灵活性:提供 WebView(轻量、原生)和 CEF(一致、现代)两种后端选择,满足不同场景需求。

意义与影响

Deno 2.9 的发布标志着 Deno 从单纯的“Node.js 替代品”向“全栈现代运行时”迈出了重要一步。

首先,deno desktop 的出现填补了 Web 开发者构建原生桌面应用的空白。对于熟悉 React、Vue 或

查看原文 →deno.com