概述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

发表评论 取消回复