概览NDJSON 将对象按行分隔输出,便于客户端逐行解析。利用 Edge Runtime 的 Web Streams 与 TransformStream,可在生成数据时持续投递,降低首包与总体等待时间。服务端 Route Handlerapp/api/stream/route.tsexport const runtime = 'edge' function encode(obj: unknown) { return new TextEncoder().encode(JSON.stringify(obj) + '\n') } export async function GET() { const { readable, writable } = new TransformStream() const writer = writable.getWriter() let i = 0 const timer = setInterval(() => { i++ writer.write(encode({ id: i, ts: Date.now() })) if (i >= 5) { clearInterval(timer) writer.close() } }, 500) return new Response(readable, { headers: { 'Content-Type': 'application/x-ndjson', 'Cache-Control': 'no-cache', Connection: 'keep-alive', }, }) } 客户端消费async function consume() { const res = await fetch('/api/stream') const reader = res.body!.getReader() const decoder = new TextDecoder() let buffer = '' while (true) { const { value, done } = await reader.read() if (done) break buffer += decoder.decode(value, { stream: true }) let idx while ((idx = buffer.indexOf('\n')) !== -1) { const line = buffer.slice(0, idx) buffer = buffer.slice(idx + 1) if (line) { const obj = JSON.parse(line) console.log('item', obj) } } } } 治理要点设置 `text/event-stream` 或 `application/x-ndjson` 之一并保持客户端解析一致。使用 `Cache-Control: no-cache` 避免中间层缓存截断。控制行对象大小与频率,避免客户端阻塞与内存膨胀。验证与指标浏览器:Chrome 120+、Safari 17+、Firefox 120+Next.js:15.0+;Edge Runtime:稳定首包低延迟;逐条解析与更新平稳

点赞(0) 打赏

评论列表 共有 0 条评论

暂无评论
立即
投稿

微信公众账号

微信扫一扫加关注

发表
评论
返回
顶部
2.122994s