菜单

不稳定特性

相关源文件

本文档涵盖了 Deno 处于积极开发中并可能发生重大变更的实验性和不稳定 API。这些功能需要通过 --unstable 标志或特定的不稳定功能标志来启用。有关稳定运行时 API 的信息,请参阅 运行时架构。有关开发工具和测试框架,请参阅 开发工具

功能分类

Deno 的不稳定功能涵盖了几个关键的功能领域,每个领域都解决了超出标准 Web 平台 API 的特定用例。主要的不稳定功能包括:

  • 键值存储 - 具有原子操作和队列的持久化数据存储
  • 高级网络 - UDP 数据报套接字和多播支持
  • Cron 作业 - 具有重试机制的计划任务执行
  • WebGPU 扩展 - 用于图形应用程序的不安全窗口表面创建
  • Cache API - 具有 SQLite 和远程后端的 Web 标准缓存
  • Broadcast Channels - 跨上下文通信

来源: cli/tsc/dts/lib.deno.unstable.d.ts1-1000

功能标志系统

不稳定功能使用通过 FeatureChecker 机制实现的可细粒度功能标志系统。每个功能都有一个必须显式启用的专用标志。

功能标志验证流程

来源: ext/kv/lib.rs63-87 ext/broadcast_channel/lib.rs22-23

键值存储

KV 存储是最全面的不稳定功能,提供具有 ACID 事务、原子操作和后台作业队列的持久化数据存储。

核心架构

KV 存储架构概述

KV 实现采用多层架构,并支持可插拔的后端。 openKv 函数位于 ext/kv/01_db.ts54-57 中,用于创建一个新的 Kv 实例,该实例包装了一个 Rust 资源标识符。

来源: ext/kv/lib.rs65-87 ext/kv/01_db.ts54-836 ext/kv/interface.rs11-20

数据库操作和 Ops

KV 操作到后端的映射

JavaScript KV 方法映射到特定的 Rust Ops,这些 Ops 通过 denokv_proto 中定义的 Database trait 与后端数据库进行交互。

来源: ext/kv/lib.rs212-834 ext/kv/01_db.ts139-836

原子操作和事务

AtomicOperation 类通过版本戳提供具有乐观并发控制的 ACID 事务。每个操作都可以包含多个原子执行的检查和修改。

关键组件

  • 检查 - 验证版本戳是否与预期值匹配
  • 修改 - 设置、删除、求和、取最小、取最大操作
  • 排队 - 将消息加入队列以供后台处理
  • 版本戳 - 单调递增的事务标识符

commit() 方法在 ext/kv/01_db.ts554-563 中执行事务,并返回成功(带有版本戳)或失败指示。

来源: ext/kv/01_db.ts427-570 cli/tsc/dts/lib.deno.unstable.d.ts637-714

队列系统

KV 存储包含一个用于后台作业处理的分布式队列系统,支持重试逻辑和回退调度。

消息队列处理流程

来源: ext/kv/01_db.ts264-347 ext/kv/lib.rs437-600

高级网络功能

Deno 的不稳定网络功能超越了标准 Web API,支持 UDP 协议和多播通信。

UDP 数据报支持

listenDatagram 函数创建具有高级选项的 UDP 和 Unix 数据报套接字监听器。

  • UDP 套接字 - IPv4/IPv6 数据报通信
  • Unix 数据报套接字 - 本地域套接字数据报
  • 多播支持 - 加入/离开多播组
  • 地址重用 - UDP 的 reuseAddress 选项
  • 回环控制 - 多播数据包回环

DatagramConn 接口提供传入数据报的异步迭代和向特定地址发送的方法。

来源: cli/tsc/dts/lib.deno.unstable.d.ts180-203 cli/tsc/dts/lib.deno.unstable.d.ts84-115

TCP 扩展

增强的 TCP 监听选项包括:

  • 端口重用 - 用于跨进程负载均衡的 reusePort 标志(仅限 Linux)
  • 套接字共享 - 多个进程可以绑定到同一地址/端口

来源: cli/tsc/dts/lib.deno.unstable.d.ts121-134

Cron 作业

Cron 系统提供使用 Unix cron 语法或 JSON 配置的计划任务执行。

计划格式

重试和回退

Cron 作业支持带有可配置回退计划的自动重试。 backoffSchedule 数组指定重试尝试之间的延迟间隔,最多重试 5 次,最长间隔 1 小时。

来源: cli/tsc/dts/lib.deno.unstable.d.ts276-314

WebGPU 扩展

UnsafeWindowSurface 类支持跨不同平台渲染到原生窗口表面的 WebGPU。

平台窗口句柄显示句柄
macOS-NSView*
WindowsHWNDHINSTANCE
Linux X11Xlib WindowXlib Display*
Waylandwl_surface*wl_display*

表面提供 WebGPU 上下文以及用于演示和调整大小的方法。

来源: cli/tsc/dts/lib.deno.unstable.d.ts29-45

Cache API

Cache API 实现了 Web 标准 Cache 接口,并带有多个后端存储选项。

后端架构

Cache API 后端选择

缓存系统根据配置自动选择后端,其中 SQLite 提供本地存储,LSC(Deno Deploy Cache)支持远程缓存。

来源: ext/cache/lib.rs192-259 ext/cache/sqlite.rs33-114

Broadcast Channels

Broadcast channels 提供同一源内的上下文间通信,作为一种具有可插拔后端的不稳定功能实现。

BroadcastChannel trait 在 ext/broadcast_channel/lib.rs64-85 中定义了用于订阅/取消订阅操作和消息传递的接口。默认的 InMemoryBroadcastChannel 提供同进程通信。

来源: ext/broadcast_channel/lib.rs63-163

与运行时集成

不稳定功能通过 deno_core::extension! 宏集成到 Deno 的扩展系统中,用于注册 Ops 和初始化状态。

不稳定功能扩展注册

每个不稳定功能都注册为一个单独的扩展,具有自己的 Ops 和状态管理,从而允许使用可细粒度的功能标志并实现关注点的清晰分离。

来源: ext/kv/lib.rs65-87 ext/cache/lib.rs100-119 ext/broadcast_channel/lib.rs147-163