菜单

Web API 和标准符合性

相关源文件

本页面文档介绍了 Bun 对标准 Web API 的实现及其对 Web 标准规范的兼容性。这些 API 遵循 W3C、WHATWG 和 TC39 标准,可在服务器端 JavaScript 运行时中运行,同时与浏览器环境兼容。

有关 Bun 特有 API,请参阅 Bun Namespace API。有关 Node.js 兼容性 API,请参阅 Node.js 兼容性

Web API 实现概述

Bun 实现了一套全面的 Web API,以确保与现代 JavaScript 应用程序的兼容性。实现策略侧重于提供与浏览器兼容的 API,同时利用原生性能优化。

来源: packages/bun-types/globals.d.ts1-900 src/bun.js/bindings/BunObject.cpp1-100

全局对象和接口

Bun 提供了一套全面的全局对象,这些对象符合 Web 标准。这些全局对象无需导入即可使用,为 Web 兼容的 JavaScript 执行提供了基础。

关键全局 API 类别

类别API标准兼容性
事件EventEventTargetCustomEventDOM Level 2 Events
ReadableStreamWritableStreamTransformStreamWHATWG Streams
文本TextEncoderTextDecoderWHATWG Encoding
工作进程WorkerMessageEventHTML5 Web Workers
网络WebSocketEventSourceWebSocket API, Server-Sent Events
CryptocryptoSubtleCryptoWeb Crypto API
文件BlobFileFormDataFile API

来源: packages/bun-types/globals.d.ts33-297 packages/bun-types/globals.d.ts434-534

Streams API 实现

Bun 实现 WHATWG Streams 规范,提供 ReadableStreamWritableStreamTransformStream,具有完全的兼容性,包括回压处理和流转换。

流架构

Stream 功能

  • 直接流:Bun 提供 ReadableStreamDirectController 以实现高性能流
  • 回压:回压机制的完整实现
  • 队列策略:支持基于字节长度和基于计数的队列
  • 转换流:支持转换功能的双向流

来源: packages/bun-types/globals.d.ts636-820 packages/bun-types/bun.d.ts306-334

文本处理 API

Bun 通过全局 TextEncoderTextDecoder 实现 WHATWG Encoding 标准,对 UTF-8 和 UTF-16 文本处理进行了性能优化。

文本编码实现

编码功能

  • UTF-8 默认:所有 TextEncoder 实例都使用 UTF-8 编码
  • 多重解码TextDecoder 支持 UTF-8、UTF-16 和 windows-1252
  • 流式处理:支持流式解码操作
  • 性能:对常见编码操作的优化实现

来源: packages/bun-types/globals.d.ts152-200 src/bun.js/bindings/helpers.h56-184

事件系统

Bun 实现 DOM Events 规范,提供了一个与浏览器环境兼容的完整事件系统,并支持捕获和冒泡阶段。

事件系统架构

事件功能

功能实现兼容性
事件阶段捕获、目标、冒泡DOM Level 2
事件监听器函数和对象形式DOM Level 2
自定义事件带有自定义数据的通用事件DOM Level 3
事件选项oncepassivesignalDOM Level 3
事件取消preventDefault()stopPropagation()DOM Level 2

来源: packages/bun-types/globals.d.ts202-274 packages/bun-types/bun.d.ts124-196

Web Workers

Bun 实现 Web Workers,并为服务器端用例进行了扩展,提供具有消息传递能力的独立 JavaScript 执行上下文。

Worker 实现

Bun Worker 扩展

  • 内存优化smol 选项用于减少内存使用
  • 模块预加载:在 worker 执行前预加载模块
  • CLI 集成:传递出现在 Bun.argv 中的参数
  • 环境变量共享:共享或隔离环境变量
  • 生命周期管理ref()/unref() 用于事件循环控制

来源: packages/bun-types/bun.d.ts374-503 packages/bun-types/globals.d.ts52-65

WebSocket 实现

Bun 提供 WebSocket 客户端实现,遵循 WebSocket API 规范,并为服务器端用例提供了额外的连接选项。

WebSocket 架构

WebSocket 功能

  • 标准兼容性:完全支持 WebSocket API 规范
  • 自定义标头:支持自定义连接标头
  • 协议协商:支持多种协议
  • 事件循环控制:服务器应用程序的 ref()/unref()
  • 二进制支持:支持文本和二进制消息类型

来源: packages/bun-types/globals.d.ts67-131 packages/bun-types/bun.d.ts160-265

加密 API

Bun 实现 Web Crypto API 规范,通过全局 crypto 对象和 SubtleCrypto 接口提供加密操作。

Crypto API 结构

加密功能

  • 随机数生成:加密安全的随机值和 UUID
  • 对称加密:多种模式的 AES 加密
  • 非对称加密:RSA 和 ECDSA 密钥操作
  • 哈希:SHA 系列和其他摘要算法
  • 密钥管理:加密密钥的导入/导出
  • 时序攻击防护:时序安全比较操作

来源: packages/bun-types/globals.d.ts133-151 packages/bun-types/bun.d.ts10-16

定时器和调度

Bun 实现标准定时器 API,并为服务器端应用程序进行了扩展,提供了精确的计时控制和事件循环管理。

定时器实现

定时器功能

  • 标准兼容性:setTimeout, setInterval, setImmediate API
  • 定时器对象:返回带有生命周期控制方法的 Timer 对象
  • 事件循环控制:控制事件循环退出的 ref()/unref()
  • 微任务队列:通过 queueMicrotask() 进行标准微任务调度
  • 高精度:为性能关键型应用程序提供精确计时

来源: packages/bun-types/globals.d.ts392-433 packages/bun-types/globals.d.ts385-391

标准合规策略

Bun 对 Web 标准的合规性策略侧重于最大化兼容性,同时针对服务器端 JavaScript 环境进行性能优化。

合规性架构

合规性方法

标准实现方法测试策略
WHATWG Streams原生 Zig 实现,集成 WebCoreWeb 平台测试 + 性能基准测试
DOM 事件WebCore EventTarget,带 JavaScript 绑定DOM 事件测试套件
Web 加密BoringSSL 后端,带 Web Crypto API 接口Web Crypto API 合规性测试
Web Workers自定义实现,带 Node.js worker_threads 桥接Worker API 测试 + Bun 特有测试
WebSocket原生实现,标准的 API 表面WebSocket 协议合规性测试

来源: packages/bun-types/bun.d.ts49-70 src/bun.js/bindings/BunObject.cpp75-100