概述Service Worker 可通过 `respondWith(new Response(stream))` 返回流式响应,实现边获取边传输。结合背压与分片控制稳定性。用法/示例self.addEventListener('fetch', e => { const { request } = e e.respondWith((async () => { const res = await fetch(request) const reader = res.body.getReader() const stream = new ReadableStream({ async pull(controller) { const { value, done } = await reader.read() if (done) controller.close(); else controller.enqueue(value) }, cancel() { reader.cancel() } }) return new Response(stream, { headers: res.headers }) })()) }) 工程建议处理背压与取消,确保资源释放;对错误使用 `e.respondWith` 的回退响应。对大对象做分片与校验,保障完整性;在弱网场景限速与分批。验证浏览器支持与代理链路兼容,必要时回退到普通 `fetch`。参考与验证MDN:Streams API — https://developer.mozilla.org/docs/Web/API/Streams_APIweb.dev:Streaming responses — https://web.dev/articles/streams

发表评论 取消回复