做翻译类接口最怕什么?不是翻译错,是"等"。一段 2000 字的产品说明,调一次翻译接口,浏览器转圈 26 秒才吐出整段------用户早关了页面。
我们自己的网关就踩过这个坑:上游把整段译完才回传,网关又原样攒完再发。链路是"上游攒完 → 网关攒完 → 前端一次性渲染",三段等待叠在一起。
真流式:边收边发
核心改造只有一句话:上游每吐一个 chunk,网关立刻转发给前端,而不是攒完再发。
前端用 fetch + ReadableStream 逐块渲染:
javascript
const resp = await fetch('https://yingsuan.top/v1/chat/completions', {
method: 'POST',
headers: {'Content-Type': 'application/json', 'Authorization': 'Bearer ' + KEY},
body: JSON.stringify({model: 'deepseek-chat', stream: true, messages})
});
const reader = resp.body.getReader();
const dec = new TextDecoder();
while (true) {
const {value, done} = await reader.read();
if (done) break;
const chunk = dec.decode(value, {stream: true});
// 逐块把译文追加到页面,用户 0.5 秒级看到第一个字
box.innerText += chunk;
}
改造后实测:长文档翻译首字延迟从 15 秒级降到亚秒级,前端不再干等。配合网关运行时升级到 Node 22,整体首字速度又快了一截。
为什么值得做
- 翻译、写作、摘要这类"越长越慢"的场景,流式体验是刚需;
- 同样的接口,流式与否用户体感差一个数量级;
- 服务端改动小,收益大,属于"早做早享受"。
到盈算智服官网注册领免费 Key(搜索"盈算智服"),把上面的流式片段贴进你的项目,长文翻译立刻从"转圈"变"边出边看"。性能优化不靠堆硬件,靠把每一段等待都砍掉。