大号在练葵花宝典 发表于 2025-3-14 02:33:01

前端流式输出3种实现

在前端开发中,流式输出(streaming output)通常是指逐步输出数据,而不是等待所有数据准备好后一次性显示。这种技术在处理大型数据集、实时数据或必要逐步加载内容的情况下非常有用。下面先容几种实现流式输出的方法,包罗利用 Fetch API 和 EventSource。
1. 利用 Fetch API 实现流式输出

通过 Fetch API 和可读流(Readable Streams),可以在响应到达时逐步读取和处理数据。这在处理大文件或实时更新时非常有效。
示例代码

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Stream Output Example</title>
</head>
<body>
    <h1>Streamed Output</h1>
    <div id="output"></div>

    <script>
      async function streamData() {
            const response = await fetch('https://jsonplaceholder.typicode.com/posts');
            const reader = response.body.getReader();
            const outputDiv = document.getElementById('output');
            let result;

            // 读取数据流
            while (!(result = await reader.read()).done) {
                const chunk = new TextDecoder().decode(result.value);
                // 将新接收到的部分添加到输出
                outputDiv.innerHTML += chunk + '<br>';
            }
      }

      streamData();
    </script>
</body>
</html>
2. 利用 Server-Sent Events (SSE)

Server-Sent Events (SSE) 是一种技术,可以从服务器向客户端推送实时数据。它基于HTTP协议,利用EventSource API。
示例代码

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>SSE Example</title>
</head>
<body>
    <h1>Server-Sent Events Example</h1>
    <div id="output"></div>

    <script>
      const outputDiv = document.getElementById('output');
      const eventSource = new EventSource('https://example.com/sse'); // 替换为你的SSE服务URL

      eventSource.onmessage = function(event) {
            outputDiv.innerHTML += 'Received: ' + event.data + '<br>';
      };

      eventSource.onerror = function(event) {
            console.error('Error occurred:', event);
            eventSource.close(); // 关闭连接
      };
    </script>
</body>
</html>
3. 利用 WebSockets

WebSockets 提供了全双工通信,允许在客户端和服务器之间举行实时数据传输。这实用于必要双向通信的场景。
示例代码

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>WebSocket Example</title>
</head>
<body>
    <h1>WebSocket Example</h1>
    <div id="output"></div>

    <script>
      const outputDiv = document.getElementById('output');
      const socket = new WebSocket('wss://example.com/socket'); // 替换为你的WebSocket服务URL

      socket.onopen = function() {
            console.log('WebSocket connection established');
      };

      socket.onmessage = function(event) {
            outputDiv.innerHTML += 'Received: ' + event.data + '<br>';
      };

      socket.onerror = function(error) {
            console.error('WebSocket error:', error);
      };

      socket.onclose = function() {
            console.log('WebSocket connection closed');
      };
    </script>
</body>
</html>
总结



[*]Fetch API:适合在HTTP响应中逐步获取和处理数据流。
[*]Server-Sent Events:用于从服务器推送实时变乱,简朴易用。
[*]WebSockets:提供双向通信,适合必要实时交互的应用。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页: [1]
查看完整版本: 前端流式输出3种实现