Deno 作为一个注重安全和标准合规性的 JavaScript/TypeScript 运行时,其 API 一直在持续迭代,尤其在对 Web 标准的支持、内置工具链和性能优化方面不断更新。以下是近年来 Deno 版本中新增的一些值得试用的 API(基于 Deno 1.30+ 至最新版本的主要更新):
1. Web API 增强
Deno 致力于对齐浏览器 Web API,近年来新增了多个实用的标准 API:
-
BroadcastChannel
用于同一 origin 下不同上下文(如 Worker 与主线程)之间的通信,类似浏览器中的实现。
typescript// 主线程 const channel = new BroadcastChannel("my-channel"); channel.postMessage({ type: "greet", data: "Hello from main!" }); // Worker 中 const channel = new BroadcastChannel("my-channel"); channel.onmessage = (e) => console.log(e.data); // 接收消息
-
TextEncoderStream
/TextDecoderStream
流式处理文本编码/解码,配合
Streams API
高效处理大文本:typescriptconst encoder = new TextEncoderStream(); const writer = encoder.writable.getWriter(); writer.write("Hello, Deno!"); writer.close(); // 管道到可读流处理 await encoder.readable.pipeTo(new WritableStream({ write(chunk) { console.log(chunk); } }));
2. 内置模块新特性
Deno 的内置模块(如 deno/fs
、deno/http
)新增了多个实用 API:
-
Deno.FsFile
扩展方法
deno/fs
模块的FsFile
类新增了readRange
方法,支持读取文件的指定字节范围:typescriptimport { open } from "deno/fs"; const file = await open("large-file.txt", { read: true }); const buffer = new Uint8Array(1024); // 读取从偏移量 512 开始的 1024 字节 const { nread } = await file.readRange(buffer, 512); console.log(new TextDecoder().decode(buffer.subarray(0, nread))); file.close();
-
deno/http
服务器增强支持
AbortSignal
终止请求,以及流式响应的更简洁写法:typescriptimport { serve } from "deno/http"; serve((req) => { // 10秒后终止未完成的请求 const abortController = new AbortController(); setTimeout(() => abortController.abort(), 10000); return new Response( (async function* () { yield "Streaming...\n"; await new Promise(resolve => setTimeout(resolve, 1000)); yield "Done!"; })(), { signal: abortController.signal } ); });
3. 安全与权限 API
Deno 以安全为核心,新增了更细粒度的权限控制 API:
-
Deno.permissions.queryAll
批量查询当前进程的权限状态,替代逐个查询的繁琐操作:
typescriptconst permissions = await Deno.permissions.queryAll([ { name: "read", path: "/data" }, { name: "net", host: "api.example.com" } ]); console.log(permissions); // 输出各权限的状态(granted/denied)
-
Deno.permissions.revoke
增强支持撤销已授予的权限,并返回撤销结果:
typescriptconst { success } = await Deno.permissions.revoke({ name: "write", path: "/tmp" }); if (success) console.log("写入权限已撤销");
4. 性能优化相关 API
-
Deno.memoryUsage()
新增更详细的内存使用统计,包括堆内存、外部内存等:
typescriptconst memory = Deno.memoryUsage(); console.log(`Heap used: ${memory.heapUsed / 1024 / 1024} MB`);
-
Deno.resolveDns
直接解析 DNS 记录(支持 A、AAAA、CNAME 等类型),无需依赖第三方库:
typescriptconst records = await Deno.resolveDns("deno.land", "A"); console.log("IPv4 地址:", records); // 输出 ["192.168.1.1", ...]
5. 实验性 API(需 --unstable
标志)
以下 API 仍在实验阶段,需通过 deno run --unstable
启用:
-
Deno.kv
内置的键值存储,支持持久化、事务和原子操作,适合轻量级数据存储:
typescriptconst kv = await Deno.openKv(); await kv.set(["user", 1], { name: "Alice", age: 30 }); const { value } = await kv.get(["user", 1]); console.log(value); // { name: "Alice", age: 30 }
-
Deno.createHttpClient
自定义 HTTP 客户端,支持代理、超时和 TLS 配置:
typescriptconst client = Deno.createHttpClient({ proxy: "http://proxy.example.com:8080", timeout: 5000, }); const res = await fetch("https://deno.land", { client });
试用建议
- 实验性 API 可能会在后续版本中变更,生产环境慎用。
- 查看 Deno 官方文档 或 发布日志 获取最新 API 详情。
- 通过
deno --version
确认当前版本,部分 API 仅在特定版本后可用。
这些新 API 进一步提升了 Deno 在开发效率、安全性和标准兼容性方面的优势,适合在工具开发、服务端应用等场景中尝试。