当前位置: 代码网 > it编程>编程语言>Javascript > 前端流式输出的三种实现方法

前端流式输出的三种实现方法

2024年11月25日 Javascript 我要评论
前言在前端开发中,流式输出(streaming output)通常是指逐步输出数据,而不是等待所有数据准备好后一次性显示。这种技术在处理大型数据集、实时数据或需要逐步加载内容的情况下非常有用。下面介绍

前言

在前端开发中,流式输出(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:提供双向通信,适合需要实时交互的应用。

到此这篇关于前端流式输出的三种实现方法的文章就介绍到这了,更多相关前端流式输出实现内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com