Cloudflare Workers 运行时构建于 V8 JavaScript 和 WebAssembly 引擎之上。Workers 运行时至少每周更新一次,至少更新到 Google Chrome 稳定版当前使用的 V8 版本。这意味着您可以安全地使用最新的 JavaScript 功能,无需转译器。
当前 Google Chrome 稳定版支持的所有标准内置对象 ↗均受支持,但有以下显著例外:
- 出于安全原因,以下操作不被允许:
eval()new FunctionWebAssembly.compile↗WebAssembly.compileStreaming↗- 带有缓冲区参数 ↗的
WebAssembly.instantiate WebAssembly.instantiateStreaming↗
Date.now()返回最后一次 I/O 的时间;在代码执行期间不会推进。
以下方法根据 Worker Global Scope ↗ 提供:
-
atob()
- 解码使用 base-64 编码的数据字符串。
-
btoa()
- 从二进制数据字符串创建 base-64 编码的 ASCII 字符串。
-
setInterval()
- 安排函数在指定的毫秒数间隔重复执行。
-
clearInterval()
- 取消使用
setInterval()↗ 设置的重复执行。
- 取消使用
-
setTimeout()
- 安排函数在指定时间后执行。
-
clearTimeout()
- 取消使用
setTimeout()↗ 设置的延迟执行。
- 取消使用
-
- 返回一个在指定毫秒数后解析的 Promise。是
setTimeout()的可await替代方案。
- 返回一个在指定毫秒数后解析的 Promise。是
-
performance.timeOrigin
- 返回高分辨率时间原点。Workers 使用 UNIX 纪元作为时间原点,这意味着
performance.timeOrigin始终返回0。
- 返回高分辨率时间原点。Workers 使用 UNIX 纪元作为时间原点,这意味着
-
performance.now()
- 返回
DOMHighResTimeStamp,表示自performance.timeOrigin以来经过的毫秒数。请注意,Workers 有意降低performance.now()的精度,使其返回最后一次 I/O 的时间,在代码执行期间不会推进。实际上,由于此原因以及performance.timeOrigin始终为0,performance.now()将始终等于Date.now(),在 Worker 内提供一致的时间流逝视图。
- 返回
EventTarget ↗ 和 Event ↗ API 允许对象发布和订阅事件。
AbortController ↗ 和 AbortSignal ↗ API 提供了取消异步操作的通用模型。
- fetch()
- 开始从网络获取资源的过程。请参阅 Fetch API。
TextEncoder 和 TextDecoder 均支持 UTF-8 编码/解码。
TextEncoderStream ↗ 和 TextDecoderStream ↗ 类也可用。
URL API 支持符合 HTTP 和 HTTPS 方案的 URL。
CompressionStream 和 DecompressionStream 类支持 deflate、deflate-raw 和 gzip 压缩方法。
URLPattern API 提供基于便捷模式语法匹配 URL 的机制。
Intl API 允许您将日期、时间、数字等格式化为所提供区域设置(语言和地区)使用的格式。
设置 global_navigator 兼容性标志后,navigator.userAgent ↗ 属性可用,值为 'Cloudflare-Workers'。例如,可用于可靠地确定代码是否在 Workers 环境中运行。
当 JavaScript Promise 被拒绝且未附加 rejection 处理程序时,全局作用域会发出 unhandledrejection ↗ 事件。
当 JavaScript Promise 的 rejection 被延迟处理(在 unhandledrejection 事件已发出之后,才向 Promise 附加 rejection 处理程序)时,全局作用域会发出 rejectionhandled ↗ 事件。
addEventListener("unhandledrejection", (event) => {
console.log(event.promise); // The promise that was rejected.
console.log(event.reason); // The value or Error with which the promise was rejected.
});
addEventListener("rejectionhandled", (event) => {
console.log(event.promise); // The promise that was rejected.
console.log(event.reason); // The value or Error with which the promise was rejected.
});设置 global_navigator 兼容性标志后,navigator.sendBeacon(...) ↗ API 可用于向 Web 服务器发送包含少量数据的 HTTP POST 请求。此 API 旨在作为尽力而为(best-effort)异步传输分析或诊断信息的手段。
例如,您可以将:
const promise = fetch("https://example.com", {
method: "POST",
body: "hello world",
});
ctx.waitUntil(promise);替换为 navigator.sendBeacon(...):
navigator.sendBeacon("https://example.com", "hello world");设置 enable_web_file_system 兼容性标志后,Workers 支持 Web File System Access API ↗,允许您在 Worker 环境内的虚拟文件系统中读写文件和目录。此 API 提供对与 node:fs 模块 相同的内存虚拟文件系统的访问,但无需启用 Node.js 兼容性。
const root = await navigator.storage.getDirectory();
export default {
async fetch(request) {
const fileHandle = await root.getFileHandle("hello.txt", { create: true });
const writable = await fileHandle.createWritable();
await writable.write("Hello, world!");
await writable.close();
const file = await fileHandle.getFile();
const contents = await file.text();
return new Response(contents, { status: 200 });
},
};请参阅 MDN 文档 ↗ 了解如何使用此 API,并参阅 node:fs 文档 了解虚拟文件系统结构和限制。