前端流式輸出的三種實(shí)現(xiàn)方法
前言
在前端開發(fā)中,流式輸出(streaming output)通常是指逐步輸出數(shù)據(jù),而不是等待所有數(shù)據(jù)準(zhǔn)備好后一次性顯示。這種技術(shù)在處理大型數(shù)據(jù)集、實(shí)時(shí)數(shù)據(jù)或需要逐步加載內(nèi)容的情況下非常有用。下面介紹幾種實(shí)現(xiàn)流式輸出的方法,包括使用 Fetch API 和 EventSource。
1. 使用 Fetch API 實(shí)現(xiàn)流式輸出
通過 Fetch API 和可讀流(Readable Streams),可以在響應(yīng)到達(dá)時(shí)逐步讀取和處理數(shù)據(jù)。這在處理大文件或?qū)崟r(shí)更新時(shí)非常有效。
示例代碼
<!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;
// 讀取數(shù)據(jù)流
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) 是一種技術(shù),可以從服務(wù)器向客戶端推送實(shí)時(shí)數(shù)據(jù)。它基于HTTP協(xié)議,使用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服務(wù)URL
eventSource.onmessage = function(event) {
outputDiv.innerHTML += 'Received: ' + event.data + '<br>';
};
eventSource.onerror = function(event) {
console.error('Error occurred:', event);
eventSource.close(); // 關(guān)閉連接
};
</script>
</body>
</html>
3. 使用 WebSockets
WebSockets 提供了全雙工通信,允許在客戶端和服務(wù)器之間進(jìn)行實(shí)時(shí)數(shù)據(jù)傳輸。這適用于需要雙向通信的場(chǎng)景。
示例代碼
<!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服務(wù)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>
總結(jié)
- Fetch API:適合在HTTP響應(yīng)中逐步獲取和處理數(shù)據(jù)流。
- Server-Sent Events:用于從服務(wù)器推送實(shí)時(shí)事件,簡單易用。
- WebSockets:提供雙向通信,適合需要實(shí)時(shí)交互的應(yīng)用。
到此這篇關(guān)于前端流式輸出的三種實(shí)現(xiàn)方法的文章就介紹到這了,更多相關(guān)前端流式輸出實(shí)現(xiàn)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Bootstrap基本插件學(xué)習(xí)筆記之Popover提示框(19)
這篇文章主要為大家詳細(xì)介紹了Bootstrap基本插件學(xué)習(xí)筆記之Popover提示框的相關(guān)資料,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-12-12
一起盤點(diǎn)JavaScript中一些強(qiáng)大的運(yùn)算符
javascript中的運(yùn)算符大多由標(biāo)點(diǎn)符號(hào)表示,少數(shù)由關(guān)鍵字表示,它們的語法言簡意賅,它們的數(shù)量卻著實(shí)不少,下面這篇文章主要給大家介紹了關(guān)于JavaScript中一些強(qiáng)大的運(yùn)算符的相關(guān)資料,需要的朋友可以參考下2021-11-11
JavaScript?CSS解析B站的彈幕可以不擋人物原理及技巧
這篇文章主要為大家介紹了JavaScript?CSS解析B站的彈幕可以不擋人物原理及技巧,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-01-01
詳解Typescript中的strictPropertyInitialization的作用
本文主要介紹了Typescript中的strictPropertyInitialization的作用,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2025-10-10
javascript基于牛頓迭代法實(shí)現(xiàn)求浮點(diǎn)數(shù)的平方根【遞歸原理】
這篇文章主要介紹了javascript基于牛頓迭代法實(shí)現(xiàn)求浮點(diǎn)數(shù)的平方根,簡單說明了牛頓迭代法的原理,并結(jié)合實(shí)例分析了javascript基于遞歸的數(shù)值運(yùn)算相關(guān)操作技巧,需要的朋友可以參考下2017-09-09
BootstrapTable與KnockoutJS相結(jié)合實(shí)現(xiàn)增刪改查功能【一】
KnockoutJS是一個(gè)JavaScript實(shí)現(xiàn)的MVVM框架。通過本文給大家介紹BootstrapTable與KnockoutJS相結(jié)合實(shí)現(xiàn)增刪改查功能【一】,感興趣的朋友一起學(xué)習(xí)吧2016-05-05

