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

点赞(0) 打赏

评论列表 共有 0 条评论

暂无评论
立即
投稿

微信公众账号

微信扫一扫加关注

发表
评论
返回
顶部