本文档涵盖了 Deno 处于积极开发中并可能发生重大变更的实验性和不稳定 API。这些功能需要通过 --unstable 标志或特定的不稳定功能标志来启用。有关稳定运行时 API 的信息,请参阅 运行时架构。有关开发工具和测试框架,请参阅 开发工具。
Deno 的不稳定功能涵盖了几个关键的功能领域,每个领域都解决了超出标准 Web 平台 API 的特定用例。主要的不稳定功能包括:
来源: 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
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 协议和多播通信。
listenDatagram 函数创建具有高级选项的 UDP 和 Unix 数据报套接字监听器。
reuseAddress 选项DatagramConn 接口提供传入数据报的异步迭代和向特定地址发送的方法。
来源: cli/tsc/dts/lib.deno.unstable.d.ts180-203 cli/tsc/dts/lib.deno.unstable.d.ts84-115
增强的 TCP 监听选项包括:
reusePort 标志(仅限 Linux)来源: cli/tsc/dts/lib.deno.unstable.d.ts121-134
Cron 系统提供使用 Unix cron 语法或 JSON 配置的计划任务执行。
Cron 作业支持带有可配置回退计划的自动重试。 backoffSchedule 数组指定重试尝试之间的延迟间隔,最多重试 5 次,最长间隔 1 小时。
来源: cli/tsc/dts/lib.deno.unstable.d.ts276-314
UnsafeWindowSurface 类支持跨不同平台渲染到原生窗口表面的 WebGPU。
| 平台 | 窗口句柄 | 显示句柄 |
|---|---|---|
| macOS | - | NSView* |
| Windows | HWND | HINSTANCE |
| Linux X11 | Xlib Window | Xlib Display* |
| Wayland | wl_surface* | wl_display* |
表面提供 WebGPU 上下文以及用于演示和调整大小的方法。
来源: cli/tsc/dts/lib.deno.unstable.d.ts29-45
Cache API 实现了 Web 标准 Cache 接口,并带有多个后端存储选项。
Cache API 后端选择
缓存系统根据配置自动选择后端,其中 SQLite 提供本地存储,LSC(Deno Deploy Cache)支持远程缓存。
来源: ext/cache/lib.rs192-259 ext/cache/sqlite.rs33-114
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