前端开发处理‘流式数据’与‘非流式数据’,在接收完整与非完整性数据时应该如何渲染和使用

在前端开发中,处理 非流式数据流式数据 的方式不同。根据是否完整接收数据、是否实时渲染的需求,可以分为以下四种典型场景:


一、四类常见场景总结

类型 数据完整性 是否实时渲染 适用技术/方法
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')
### 使用 Axios 前端处理流式数据 Axios 是一种流行的 JavaScript 库,用于在浏览器 Node.js 中发起 HTTP 请求。尽管 Axios 主要设计为发送一次性请求并返回完整的响应体,但它也可以通过特定方式支持流式数据接收。 #### 实现方法 为了实现前端使用 Axios 接收流式数据的功能,可以利用 `ArrayBuffer` 或者 `Blob` 类型来逐步读取服务器推送的数据片段[^1]。以下是具体的技术细节: - **设置 responseType**: 需要在 Axios 的配置选项中指定 `responseType` 参数为 `'arraybuffer'` 或 `'blob'`,以便能够逐块获取二进制形式的数据。 ```javascript const config = { method: 'get', url: '/streaming-endpoint', responseType: 'arraybuffer' }; ``` - **监听进度事件**: 利用 Axios 提供的拦截器或者直接绑定到 XHR 对象上的 `onDownloadProgress` 方法,可以在每次接收到新的数据触发回调函数[^2]。 ```javascript axios(config).then(function(response){ console.log('All chunks received'); }).catch(function(error){ console.error('Error occurred:', error); }); // Progress handler setup within request configuration. config.onDownloadProgress = function(progressEvent) { var chunk = progressEvent.currentTarget.response; // Get current chunk of data as ArrayBuffer or Blob if(chunk instanceof ArrayBuffer){ processBinaryData(new Uint8Array(chunk)); // Convert to byte array and pass it further processing logic }else{ processDataAsTextOrHtml(chunk); // Handle text/html content types accordingly } } ``` 上述代码展示了如何定义一个 GET 请求去访问 `/streaming-endpoint` 路径,并且设置了相应的参数以适应流媒体传输的需求。每当有新的一部分数据到达客户端的候都会调用一次 `processBinaryData()` 函数或者是针对二进制数据类型的其他适当处理器。 需要注意的是,在实际应用过程中可能还需要考虑错误恢复机制以及断开连接后的重新建立等问题[^3]。 #### 注意事项 由于标准版 Axios 并未完全优化对于大规模连续输入的支持情况,因此如果项目中有常严格的实性能需求,则建议评估是否切换至专门面向 WebSocket 技术栈或者其他更高级别的解决方案上。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

香蕉可乐荷包蛋

努力写有用的code

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值