亚洲国产日韩欧美一区二区三区,精品亚洲国产成人av在线,国产99视频精品免视看7,99国产精品久久久久久久成人热,欧美日韩亚洲国产综合乱

目錄
流API解決了什麼問題?
這三種流(以及何時(shí)使用它們)
1。在塊中讀取一個(gè)大文件
2。通過轉(zhuǎn)換式的管道
3.寫入WritableStream(例如,服務(wù)工作者緩存)
實(shí)用的提示和陷阱
您可能沒有意識(shí)到的真實(shí)世界用例
首頁(yè) web前端 H5教程 對(duì)Web流API的實(shí)用查看

對(duì)Web流API的實(shí)用查看

Jul 29, 2025 am 03:06 AM
程式設(shè)計(jì)

流API解決了必須在處理之前等待所有數(shù)據(jù)到達(dá)的問題,從而使數(shù)據(jù)流入流中。這是通過三種核心類型來實(shí)現(xiàn)的:1。讀取數(shù)據(jù)塊,例如逐行讀取大量日誌文件,而不將其完全加載到內(nèi)存中; 2。用於逐步編寫數(shù)據(jù)的WritableStream,例如將視頻響應(yīng)直接流式傳輸?shù)椒?wù)工作者中的緩存; 3. TransformStream用於即時(shí)轉(zhuǎn)換數(shù)據(jù),例如解壓縮GZIP響應(yīng)或解碼文本,允許有效的,可複合的管道;實(shí)際用例包括流媒體AI響應(yīng),解析大型CSV,實(shí)時(shí)媒體處理以及使用進(jìn)度跟蹤的加密文件上傳,同時(shí)利用背壓並避免過多的內(nèi)存使用 - 使其成為一種強(qiáng)大的,無框架的工具,可以更快地構(gòu)建更快的構(gòu)建工具。

Web Streams API不僅僅是另一個(gè)抽象規(guī)格,它是一種實(shí)用的工具,多年來一直在悄悄地在網(wǎng)絡(luò)上實(shí)現(xiàn)更好的性能和用戶體驗(yàn)。無論您是否直接使用它,在獲取大型文件,處理媒體或處理實(shí)時(shí)數(shù)據(jù)時(shí),您都有可能從中受益。讓我們紮實(shí)地了解它的實(shí)際功能,幫助您的實(shí)際功能以及如何有效使用它。


流API解決了什麼問題?

流式API以此為核心,解決了一個(gè)基本限制:您不必在開始使用之前等待所有數(shù)據(jù)到達(dá)。

想像一下下載100MB JSON文件。在傳統(tǒng)上, fetch()等待整個(gè)響應(yīng)在解析之前下載。這意味著用戶凝視著空白屏幕,直到下載結(jié)束為止,即使第一大數(shù)據(jù)可以立即渲染一些有用的東西。

流使您在到達(dá)時(shí)會(huì)逐步處理數(shù)據(jù)。這特別強(qiáng)大:

  • 大型文件下載(例如CSV,視頻,日誌)
  • 實(shí)時(shí)數(shù)據(jù)(例如,服務(wù)器量事件,AI響應(yīng))
  • 動(dòng)態(tài)轉(zhuǎn)換數(shù)據(jù)(例如,解壓縮,逐條解析)

您無需將所有內(nèi)容固定在記憶中,而可以逐步閱讀,轉(zhuǎn)換和消耗塊。


這三種流(以及何時(shí)使用它們)

流API定義了三種主要類型:

  • readableSream :數(shù)據(jù)流出(例如, fetch()響應(yīng)主體)
  • WritableStream :數(shù)據(jù)流入(例如,寫入文件或網(wǎng)絡(luò))
  • 轉(zhuǎn)換流:可讀和可寫的 - 傳遞數(shù)據(jù)時(shí)的數(shù)據(jù)

大多數(shù)實(shí)用的用例涉及將它們結(jié)合在一起。

1。在塊中讀取一個(gè)大文件

說您正在下載一個(gè)大日誌文件,並想顯示線到達(dá)時(shí):

 const響應(yīng)=等待fetch('/logs/gubit-file.log');
const reader = wenders.body.getReader();
const解碼器= new TextDecoder();

令buffer ='';

而(true){
  const {done,value} =等待reader.read();
  如果(完成)休息;

  buffer = dexoder.decode(value,{stream:true});
  const lines = buffer.split('\ n');
  buffer = lines.pop(); //保持不完整的線路

  對(duì)於(const行線){
    console.log('處理行:',行);
    //更新UI,過濾或分析
  }
}

這樣可以避免將整個(gè)文件加載到內(nèi)存中並立即提供反饋。

2。通過轉(zhuǎn)換式的管道

是否想即時(shí)解壓縮GZIP響應(yīng)?還是將UTF-8字節(jié)流轉(zhuǎn)換為文本?

 const響應(yīng)=等待提?。?amp;#39;/data.json.gz');

const流=響應(yīng)。
  。
  。

const讀取器= stream.getReader();

而(true){
  const {done,value} =等待reader.read();
  如果(完成)休息;
  console.log('塊:',value); //流程解壓縮文本
}

這是乾淨(jìng),可組合和高效的,沒有臨時(shí)的緩衝區(qū)。

3.寫入WritableStream(例如,服務(wù)工作者緩存)

在服務(wù)工作者中,您可以直接將響應(yīng)傳輸?shù)骄彺妫?/p>

 event.respondwith(
  (async()=> {
    const響應(yīng)=等待提取('/video.mp4');
    const {可讀,writable} = new Transformstream();

    //流對(duì)客戶端和緩存的響應(yīng)
    const響應(yīng)=響應(yīng)。 clone();
    響應(yīng)body.pipeto(writable); //保存到緩存

    返回新的響應(yīng)(可讀,響應(yīng)電源);
  })()()
);

這允許漸進(jìn)的緩存而無需阻止用戶。


實(shí)用的提示和陷阱

雖然強(qiáng)大,但溪流不是魔術(shù)。這是值得關(guān)注的地方:

  • 瀏覽器支持在現(xiàn)代瀏覽器(Chrome,F(xiàn)irefox,Edge,Safari 14.1)中具有固體,但請(qǐng)檢查您是否支持較舊的環(huán)境。
  • 錯(cuò)誤處理事項(xiàng)- 始終處理reader.read()拒絕並正確關(guān)閉流。
  • 瀏覽器中的背壓是自動(dòng)的:如果您的消費(fèi)者很慢,則會(huì)停頓。這是一個(gè)功能,而不是錯(cuò)誤。
  • 不要忘記解碼- response.body給您Uint8Array 。使用TextDecoderStream或手動(dòng)解碼。
  • 避免混合異步和同步處理- 當(dāng)您擁抱異步流時(shí),流效果最好。

您可能沒有意識(shí)到的真實(shí)世界用例

  • AI Chat UIS :從LLM API流式傳輸令牌,並在它們到達(dá)時(shí)顯示它們。
  • CSV解析器:在瀏覽器中解析大型CSV,而無需加載整個(gè)文件。
  • 音頻/視頻處理:在播放之前修改媒體塊(例如,過濾,水印)。
  • 使用進(jìn)度加密的文件上傳:實(shí)時(shí)轉(zhuǎn)換塊,同時(shí)顯示上傳進(jìn)度。

這些不是邊緣案例,它們已成為標(biāo)準(zhǔn)期望。


流API與浮華的功能無關(guān)。這與效率,響應(yīng)能力和控制有關(guān)。一旦開始思考,您將看到機(jī)會(huì)使您的應(yīng)用程序更快,更具彈性。最好的部分?您不需要一個(gè)框架 - 只是提取,解碼器和異步迭代的一點(diǎn)耐心。

基本上,如果您在做任何事情之前都在等待所有數(shù)據(jù),那麼您可能會(huì)做錯(cuò)了。

以上是對(duì)Web流API的實(shí)用查看的詳細(xì)內(nèi)容。更多資訊請(qǐng)關(guān)注PHP中文網(wǎng)其他相關(guān)文章!

本網(wǎng)站聲明
本文內(nèi)容由網(wǎng)友自願(yuàn)投稿,版權(quán)歸原作者所有。本站不承擔(dān)相應(yīng)的法律責(zé)任。如發(fā)現(xiàn)涉嫌抄襲或侵權(quán)的內(nèi)容,請(qǐng)聯(lián)絡(luò)admin@php.cn

熱AI工具

Undress AI Tool

Undress AI Tool

免費(fèi)脫衣圖片

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅(qū)動(dòng)的應(yīng)用程序,用於創(chuàng)建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費(fèi)的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費(fèi)的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強(qiáng)大的PHP整合開發(fā)環(huán)境

Dreamweaver CS6

Dreamweaver CS6

視覺化網(wǎng)頁(yè)開發(fā)工具

SublimeText3 Mac版

SublimeText3 Mac版

神級(jí)程式碼編輯軟體(SublimeText3)

熱門話題

Laravel 教程
1597
29
PHP教程
1488
72
VSCODE設(shè)置。 JSON位置 VSCODE設(shè)置。 JSON位置 Aug 01, 2025 am 06:12 AM

settings.json文件位於用戶級(jí)或工作區(qū)級(jí)路徑,用於自定義VSCode設(shè)置。 1.用戶級(jí)路徑:Windows為C:\Users\\AppData\Roaming\Code\User\settings.json,macOS為/Users//Library/ApplicationSupport/Code/User/settings.json,Linux為/home//.config/Code/User/settings.json;2.工作區(qū)級(jí)路徑:項(xiàng)目根目錄下的.vscode/settings

Laravel Raw SQL查詢示例 Laravel Raw SQL查詢示例 Jul 29, 2025 am 02:59 AM

Laravel支持使用原生SQL查詢,但應(yīng)優(yōu)先使用參數(shù)綁定以確保安全;1.使用DB::select()執(zhí)行帶參數(shù)綁定的SELECT查詢,防止SQL注入;2.使用DB::update()執(zhí)行UPDATE操作並返回影響行數(shù);3.使用DB::insert()插入數(shù)據(jù);4.使用DB::delete()刪除數(shù)據(jù);5.使用DB::statement()執(zhí)行如CREATE、ALTER等無結(jié)果集的SQL語句;6.推薦在QueryBuilder中使用whereRaw、selectRaw等方法結(jié)合原生表達(dá)式以提升安

以身作則 以身作則 Jul 29, 2025 am 04:10 AM

Go泛型從1.18開始支持,用於編寫類型安全的通用代碼。 1.泛型函數(shù)PrintSlice[Tany](s[]T)可打印任意類型切片,如[]int或[]string。 2.通過類型約束Number限制T為int、float等數(shù)字類型,實(shí)現(xiàn)Sum[TNumber](slice[]T)T安全求和。 3.泛型結(jié)構(gòu)體typeBox[Tany]struct{ValueT}可封裝任意類型值,配合NewBox[Tany](vT)*Box[T]構(gòu)造函數(shù)使用。 4.為Box[T]添加Set(vT)和Get()T方法,無需

Python Parse Date String示例 Python Parse Date String示例 Jul 30, 2025 am 03:32 AM

使用datetime.strptime()可將日期字符串轉(zhuǎn)換為datetime對(duì)象,1.基本用法:通過"%Y-%m-%d"解析"2023-10-05"為datetime對(duì)象;2.支持多種格式如"%m/%d/%Y"解析美式日期、"%d/%m/%Y"解析英式日期、"%b%d,%Y%I:%M%p"解析帶AM/PM的時(shí)間;3.可用dateutil.parser.parse()自動(dòng)推斷未知格式;4.使用.d

Python JSON負(fù)載示例 Python JSON負(fù)載示例 Jul 29, 2025 am 03:23 AM

json.loads()用於將JSON字符串解析為Python數(shù)據(jù)結(jié)構(gòu),1.輸入必須是雙引號(hào)包裹的字符串且布爾值為true/false;2.支持null→None、對(duì)象→dict、數(shù)組→list等自動(dòng)轉(zhuǎn)換;3.常用於處理API返回的JSON字符串,如response_string經(jīng)json.loads()解析後可直接訪問嵌套數(shù)據(jù),使用時(shí)需確保JSON格式正確,否則會(huì)拋出異常。

CSS下拉菜單示例 CSS下拉菜單示例 Jul 30, 2025 am 05:36 AM

是的,一個(gè)常見的CSS下拉菜單可以通過純HTML和CSS實(shí)現(xiàn),無需JavaScript。 1.使用嵌套的ul和li構(gòu)建菜單結(jié)構(gòu);2.通過:hover偽類控制下拉內(nèi)容的顯示與隱藏;3.父級(jí)li設(shè)置position:relative,子菜單使用position:absolute進(jìn)行定位;4.子菜單默認(rèn)display:none,懸停時(shí)變?yōu)閐isplay:block;5.可通過嵌套實(shí)現(xiàn)多級(jí)下拉,結(jié)合transition添加淡入動(dòng)畫,配合媒體查詢適配移動(dòng)端,整個(gè)方案簡(jiǎn)潔且無需JavaScript支持,適合大

Python物業(yè)裝飾示例 Python物業(yè)裝飾示例 Jul 30, 2025 am 02:17 AM

@property裝飾器用於將方法轉(zhuǎn)為屬性,實(shí)現(xiàn)屬性的讀取、設(shè)置和刪除控制。 1.基本用法:通過@property定義只讀屬性,如area根據(jù)radius計(jì)算並直接訪問;2.進(jìn)階用法:使用@name.setter和@name.deleter實(shí)現(xiàn)屬性的賦值驗(yàn)證與刪除操作;3.實(shí)際應(yīng)用:在setter中進(jìn)行數(shù)據(jù)驗(yàn)證,如BankAccount確保餘額非負(fù);4.命名規(guī)範(fàn):內(nèi)部變量用_前綴,property方法名與屬性一致,通過property統(tǒng)一訪問控制,提升代碼安全性和可維護(hù)性。

Python Itertools組合示例 Python Itertools組合示例 Jul 31, 2025 am 09:53 AM

itertools.combinations用於生成從可迭代對(duì)像中選取指定數(shù)量元素的所有不重複組合(順序無關(guān)),其用法包括:1.從列表中選2個(gè)元素組合,如('A','B')、('A','C')等,避免重複順序;2.對(duì)字符串取3個(gè)字符組合,如"abc"、"abd",適用於子序列生成;3.求兩數(shù)之和等於目標(biāo)值的組合,如1 5=6,簡(jiǎn)化雙重循環(huán)邏輯;組合與排列的區(qū)別在於順序是否重要,combinations視AB與BA為相同,而permutations視為不同;

See all articles