概述Streams API 允许以增量方式读写数据。将 `ReadableStream` 用作响应体可以实现流式 SSR 与即时响应:在服务工作线程中构造 `Response`,边生成边发送,降低首字节与首屏等待。浏览器与 SW 用法浏览器端:`response.body` 为 ReadableStream,可逐块消费或 `for await...of` 迭代[参考5]。Service Worker:使用自定义 `ReadableStream` 构造 `new Response(stream, { headers })` 并 `event.respondWith(response)`,在 `controller.enqueue()` 中写入数据直至 `controller.close()`[参考3]。修改流:使用 `TransformStream` 与 `pipeTo()` 在传输过程中修改响应体(如注入片段或压缩)[参考4]。实践建议流式 SSR:首字节尽快发送,后续片段按生成就绪写入;在 SW 中 tee 流实现同时传输与写入缓存[参考2]。兼容性:注意部分浏览器对 SW 流响应支持差异;确保内容类型与编码正确,`Uint8Array` 写入建议使用 `TextEncoder`[参考5]。参考与验证[参考1]MDN 中文:Streams API 概览与 `ReadableStream` 说明:https://developer.mozilla.org/zh-CN/docs/Web/API/Streams_API[参考2]web.dev:Streams 指南(`tee()` 在 SW 中同时缓存与传输):https://web.dev/articles/streams[参考3]Chrome 文档:在 Service Worker 中使用 ReadableStream 构造响应与示例代码:https://developer.chrome.com/blog/sw-readablestreams[参考4]Cloudflare Workers:Streams 与 `TransformStream` 用法与示例:https://developers.cloudflare.com/workers/runtime-apis/streams/[参考5]MDN 英文:使用可读流与 `response.body` 迭代与消费说明:https://developer.mozilla.org/en-US/docs/Web/API/Streams_API/Using_readable_streams关键词校验关键词与流式响应/SSR主题一致。

发表评论 取消回复