deno在2025年新出了哪些api可供使用?

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 高效处理大文本:

    typescript 复制代码
    const 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/fsdeno/http)新增了多个实用 API:

  • Deno.FsFile 扩展方法
    deno/fs 模块的 FsFile 类新增了 readRange 方法,支持读取文件的指定字节范围:

    typescript 复制代码
    import { 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 终止请求,以及流式响应的更简洁写法:

    typescript 复制代码
    import { 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

    批量查询当前进程的权限状态,替代逐个查询的繁琐操作:

    typescript 复制代码
    const permissions = await Deno.permissions.queryAll([
      { name: "read", path: "/data" },
      { name: "net", host: "api.example.com" }
    ]);
    console.log(permissions); // 输出各权限的状态(granted/denied)
  • Deno.permissions.revoke 增强

    支持撤销已授予的权限,并返回撤销结果:

    typescript 复制代码
    const { success } = await Deno.permissions.revoke({ name: "write", path: "/tmp" });
    if (success) console.log("写入权限已撤销");

4. 性能优化相关 API

  • Deno.memoryUsage()

    新增更详细的内存使用统计,包括堆内存、外部内存等:

    typescript 复制代码
    const memory = Deno.memoryUsage();
    console.log(`Heap used: ${memory.heapUsed / 1024 / 1024} MB`);
  • Deno.resolveDns

    直接解析 DNS 记录(支持 A、AAAA、CNAME 等类型),无需依赖第三方库:

    typescript 复制代码
    const records = await Deno.resolveDns("deno.land", "A");
    console.log("IPv4 地址:", records); // 输出 ["192.168.1.1", ...]

5. 实验性 API(需 --unstable 标志)

以下 API 仍在实验阶段,需通过 deno run --unstable 启用:

  • Deno.kv

    内置的键值存储,支持持久化、事务和原子操作,适合轻量级数据存储:

    typescript 复制代码
    const 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 配置:

    typescript 复制代码
    const 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 在开发效率、安全性和标准兼容性方面的优势,适合在工具开发、服务端应用等场景中尝试。

相关推荐
东东5161 天前
基于ssm的网上房屋中介管理系统vue
前端·javascript·vue.js
harrain1 天前
什么!vue3.4开始,v-model不能用在prop上
前端·javascript·vue.js
fanruitian1 天前
uniapp android开发 测试板本与发行版本
前端·javascript·uni-app
rayufo1 天前
【工具】列出指定文件夹下所有的目录和文件
开发语言·前端·python
RANCE_atttackkk1 天前
[Java]实现使用邮箱找回密码的功能
java·开发语言·前端·spring boot·intellij-idea·idea
2501_944525541 天前
Flutter for OpenHarmony 个人理财管理App实战 - 支出分析页面
android·开发语言·前端·javascript·flutter
Bella的成长园地1 天前
面试中关于 c++ async 的高频面试问题有哪些?
c++·面试
李白你好1 天前
Burp Suite插件用于自动检测Web应用程序中的未授权访问漏洞
前端
Abona1 天前
C语言嵌入式全栈Demo
linux·c语言·面试
极智-9961 天前
GitHub 热榜项目-日榜精选(2026-02-02)| AI智能体、终端工具、视频生成等 | openclaw、99、Maestro等
人工智能·github·视频生成·终端工具·ai智能体·电子书管理·rust工具