在前端开发中,处理 非流式数据 和 流式数据 的方式不同。根据是否完整接收数据、是否实时渲染的需求,可以分为以下四种典型场景:
一、四类常见场景总结
类型 | 数据完整性 | 是否实时渲染 | 适用技术/方法 |
---|---|---|---|
A | 完整数据(一次性返回) | 否(等全部加载完) | fetch , axios , JSON.parse() |
B | 完整数据(一次性返回) | 是(模拟逐字显示) | setTimeout / requestAnimationFrame 模拟打字效果 |
C | 不完整数据(分段传输) | 否(等全部加载完) | buffer 缓存 + 最终解析 |
D | 不完整数据(分段传输) | 是(边接收边渲染) | ReadableStream , SSE , WebSocket , JSON 增量解析 |
场景对比表
场景 | 是否流式 | 是否实时渲染 | 是否需要增量解析 | 代表应用 |
---|---|---|---|---|
A | 非流式 | 否 | 不需要 | 获取静态数据 |
B | 非流式 | 是 | 不需要 | AI 回答展示 |
C | 流式 | 否 | 需要 | 日志聚合、大文件解析 |
D | 流式 | 是 | 需要 | AI 聊天机器人、代码生成器 |
具体情况和项目还需要具体分析,并非生搬这四种场景。以下为场景对比的详解与实现:
场景详解与实现方案
场景 A:完整数据 + 非实时渲染(最常见)
适用于传统 API 请求,如获取用户列表、文章内容等。
示例代码:
const response = await fetch('/api/data');
const data = await response.json();
render(data);
渲染逻辑:
function render(data) {
document.getElementById('content').innerText = data.content;
}
场景 B:完整数据 + 实时渲染(模拟打字效果)
适用于需要“逐字显示”的视觉效果,比如 AI 对话界面。
示例代码:
const response = await fetch('/api/data')