前端流式輸出的三種實(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)流式輸出
通過(guò) 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í)事件,簡(jiǎn)單易用。
- WebSockets:提供雙向通信,適合需要實(shí)時(shí)交互的應(yīng)用。
到此這篇關(guān)于前端流式輸出的三種實(shí)現(xiàn)方法的文章就介紹到這了,更多相關(guān)前端流式輸出實(shí)現(xiàn)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
JS表格組件神器bootstrap table詳解(基礎(chǔ)版)
這篇文章主要介紹了JS表格組件神器bootstrap table,bootstrap table界面采用扁平化的風(fēng)格,用戶體驗(yàn)比較好,更好兼容各種客戶端,需要了解更多bootstrap table的朋友可以參考下2015-12-12JavaScript實(shí)現(xiàn)防止網(wǎng)頁(yè)被嵌入Frame框架的代碼分享
這篇文章主要介紹了JavaScript實(shí)現(xiàn)防止網(wǎng)頁(yè)被嵌入Frame框架的代碼分享,本文給出了2種防嵌入方法,需要的朋友可以參考下2014-12-12微信小程序開發(fā)之好友列表字母列表跳轉(zhuǎn)對(duì)應(yīng)位置
這篇文章主要介紹了微信小程序開發(fā)之好友列表字母列表跳轉(zhuǎn)對(duì)應(yīng)位置的相關(guān)資料,希望通過(guò)本文能幫助到大家讓大家實(shí)現(xiàn)這樣的功能,需要的朋友可以參考下2017-09-09微信小程序?qū)崿F(xiàn)獲取手機(jī)號(hào)60s倒計(jì)時(shí)
這篇文章主要為大家詳細(xì)介紹了微信小程序?qū)崿F(xiàn)獲取手機(jī)號(hào)60s倒計(jì)時(shí),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-07-07JavaScript中判斷對(duì)象是否為空的方法小結(jié)
在JavaScript中,判斷一個(gè)對(duì)象是否為空可以有多種方法,這篇文章主要為大家詳細(xì)介紹了幾種常見的方法,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2024-03-03JavaScript中的標(biāo)簽語(yǔ)句用法分析
這篇文章主要介紹了JavaScript中的標(biāo)簽語(yǔ)句用法,實(shí)例分析了標(biāo)簽語(yǔ)句的功能、定義及相關(guān)使用技巧,需要的朋友可以參考下2015-02-02JS實(shí)現(xiàn)點(diǎn)擊按鈕獲取頁(yè)面高度的方法
這篇文章主要介紹了JS實(shí)現(xiàn)點(diǎn)擊按鈕獲取頁(yè)面高度的方法,涉及JavaScript針對(duì)頁(yè)面元素高度的各種常見運(yùn)算,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-11-11原生JavaScript實(shí)現(xiàn)Tooltip浮動(dòng)提示框特效
這篇文章主要為大家詳細(xì)介紹了原生JavaScript設(shè)計(jì)和實(shí)現(xiàn)Tooltip浮動(dòng)提示框特效,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-03-03