精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

優(yōu)化 await fetch():性能瓶頸分析與提速方案

開發(fā) 前端
優(yōu)化 await fetch()? 的性能涉及解決多個(gè)瓶頸。從重用連接到切換到高效的流式格式,每個(gè)修復(fù)都對(duì)更快、更高效的網(wǎng)絡(luò)請(qǐng)求做出貢獻(xiàn)??紤]使用 Undici 進(jìn)行更快的請(qǐng)求,避免使用 JSON.stringify() 進(jìn)行不必要的序列化,并實(shí)施并發(fā)控制和緩存等策略,以顯著提高應(yīng)用的性能。

在開發(fā) JavaScript 應(yīng)用程序時(shí),很容易忽視與 fetch() 相關(guān)的性能問題。然而,即使是像 await fetch() 這樣簡(jiǎn)單的代碼,也可能意外地拖慢你的應(yīng)用,導(dǎo)致網(wǎng)絡(luò)請(qǐng)求延遲并讓用戶感到沮喪。在本文中,我們將探討 fetch() 可能導(dǎo)致變慢的原因,并提供解決方案來(lái)修復(fù)它。

1. 冷 TCP 連接:突如其來(lái)的 200ms 延遲

癥狀:

  • 對(duì) API 的第一個(gè)請(qǐng)求始終比其他請(qǐng)求花費(fèi)更長(zhǎng)時(shí)間。
  • 在執(zhí)行批量操作時(shí),t??(請(qǐng)求時(shí)間的第 95 個(gè)百分位數(shù))急劇飆升。

每個(gè) fetch() 都會(huì)創(chuàng)建一個(gè)新的套接字連接,這涉及:

  • DNS 查詢:將域名解析為 IP 地址。
  • TCP 握手:建立 TCP 連接。
  • TLS 握手:通過 HTTPS 加密連接。

在歐洲等地區(qū),平均往返時(shí)間(RTT)約為 50ms,這意味著每個(gè)新請(qǐng)求都會(huì)花費(fèi)數(shù)百毫秒的額外時(shí)間。

修復(fù)方法:

import { Agent } from'undici';  
const apiAgent = newAgent({  
keepAliveTimeout: 30_000,  
// 保持套接字打開 30 秒  
connections: 100,           // 連接池大小  
});  

constfetchOrders = async () => {  
const response = awaitfetch('https://api.payments.local/v1/orders', {  
    dispatcher: apiAgent  
  });  
return response.json();  
};

在這段代碼中:

  • apiAgent 負(fù)責(zé)管理保持連接。
  • fetchOrders() 函數(shù)使用 undici 通過重用打開的連接高效地獲取數(shù)據(jù)。

2. DNS + TLS:隱藏的瓶頸

即使使用保持連接,對(duì)新域的第一個(gè)請(qǐng)求仍然會(huì)因?yàn)?DNS 查詢和 TLS 握手而變慢。

  • DNS 查詢:阻塞 JavaScript 線程,在移動(dòng)網(wǎng)絡(luò)上可能長(zhǎng)達(dá) 100ms。
  • TLS 握手:涉及三次往返,而 TCP 只需一次。

修復(fù)方法:

  • DNS 緩存:緩存 DNS 查詢以避免重復(fù)查詢。
  • 增加 maxSockets 以處理多個(gè)域。

Nginx 示例:

resolver 9.9.9.9 valid=300s;  
// 緩存 DNS 響應(yīng) 300 秒

Node.js 示例:

const agentWithDnsCache = newAgent({  
connect: { lookup: dnsCache.lookup }, // 使用 DNS 緩存進(jìn)行更快查詢  
});  

constfetchFromNewDomain = async () => {  
const response = awaitfetch('https://newapi.domain.com/v1/data', {  
    dispatcher: agentWithDnsCache,  
  });  
return response.json();  
};

替代方案:QUIC/HTTP-3

為了更快地建立連接,使用支持 0-RTT 的 QUIC/HTTP-3 來(lái)繞過這些延遲。

3. response.json() 阻塞事件循環(huán)

當(dāng)服務(wù)器發(fā)送大型 JSON 響應(yīng)(5-10MB 或更大)時(shí),調(diào)用 response.json() 會(huì)阻塞事件循環(huán),消耗 100% 的 CPU。

修復(fù)方法:流式解析

import { parse } from'stream-json'; 
import { chain } from'stream-chain'; 
import { finished } from'stream'; 

conststreamJsonResponse = async (response) => {  
const pipeline = chain([  
    response.body,    // 來(lái)自 fetch 的 ReadableStream  
    parse(),          // 解析 JSON 流  
    ({ key, value }) => { /* 處理片段 */ },  
  ]);   

awaitfinished(pipeline);  
};

這段代碼在獲取時(shí)處理 JSON 流,避免了將大量數(shù)據(jù)一次性加載到內(nèi)存中。

4. 優(yōu)化響應(yīng)大?。簤嚎s和格式

如果網(wǎng)絡(luò)速度正常但加載仍然緩慢,通常是由于數(shù)據(jù)格式低效或缺乏壓縮。

修復(fù)方法:

在客戶端請(qǐng)求壓縮(例如 Brotli):

const fetchDataWithCompression = async (url) => {  
  const response = await fetch(url, {  
    headers: { 'Accept-Encoding': 'br, gzip' },  
  });  
  return response.json();  
};

在 Fastify 后端啟用 Brotli 壓縮:

const fastify = require('fastify')(); 
fastify.register(require('@fastify/compress'), {  
  brotliOptions: { params: { [zlib.constants.BROTLI_PARAM_QUALITY]: 5 } } 
});

Brotli 壓縮相比 Gzip 可以節(jié)省多達(dá) 25% 的空間。

5. 循環(huán)中的 await:并發(fā)殺手

當(dāng)你在循環(huán)中執(zhí)行許多異步任務(wù)時(shí),即使它們可以并發(fā)運(yùn)行,它們也會(huì)按順序執(zhí)行。

常見錯(cuò)誤:

for (const id of ids) {  
  const res = await fetch(`/api/item/${id}`);  
  items.push(await res.json()); 
}

這會(huì)導(dǎo)致請(qǐng)求一個(gè)接一個(gè)地排隊(duì),造成延遲。

修復(fù)方法:限制并發(fā)

const maxConcurrency = 10; // 限制并發(fā)請(qǐng)求數(shù)量  
const requestQueue = [...ids]; // API 請(qǐng)求的 ID 數(shù)組  
const results = [];  

constfetchItemsConcurrently = async () => {  
awaitPromise.all(  
    Array.from({ length: maxConcurrency }, async () => {  
      while (requestQueue.length) {  
        const itemId = requestQueue.pop();  
        const response = awaitfetch(`/api/item/${itemId}`);  
        const itemData = await response.json();  
        results.push(itemData);  
      }  
    })  
  ); 
};

這種方法確保只有有限數(shù)量的請(qǐng)求并發(fā)發(fā)送,防止后端過載。

6. 使用 undici.request 進(jìn)行更快的請(qǐng)求

為了提高性能,考慮使用 undici 的 request 函數(shù)而不是內(nèi)置的 fetch,因?yàn)樗烨覝p少了開銷。

import { request } from'undici'; 

constpostDataWithUndici = async (url, payload) => {  
const { body } = awaitrequest(url, {  
    method: 'POST',  
    body: JSON.stringify(payload),  
    headers: { 'Content-Type': 'application/json' },  
  });  
returnawait body.json(); 
};

7. 通過服務(wù)器配置簡(jiǎn)化 CORS 預(yù)檢

CORS 預(yù)檢請(qǐng)求增加了額外的往返延遲。簡(jiǎn)化請(qǐng)求并緩存預(yù)檢響應(yīng)有助于減少這種開銷。

const express = require('express'); 
const cors = require('cors'); 
const app = express(); 

app.use(cors({  
origin: 'https://your-frontend.com',  
credentials: true,  
maxAge: 86400,  // 緩存預(yù)檢響應(yīng) 24 小時(shí) 
})); 

app.listen(3000, () => {  
console.log('Server running on port 3000'); 
});

8. HTTP/2 中的 HOL 阻塞:大文件上傳影響所有請(qǐng)求

在 HTTP/2 中,大文件上傳可能會(huì)因?yàn)閱?TCP 連接上的多路復(fù)用而阻塞其他請(qǐng)求。為了避免這種情況,應(yīng)將大請(qǐng)求和小請(qǐng)求分開。

const { Agent } = require('undici'); 
const largeUploadAgent = new Agent({ maxStreamsPerConnection: 1 }); 

const uploadLargeFile = async (largeFileUrl, bigFile) => {  
  await fetch(largeFileUrl, { dispatcher: largeUploadAgent, body: bigFile }); 
};

為了獲得更好的性能,使用 HTTP/3,它基于 UDP 工作并避免了 TCP 的瓶頸。

9. 發(fā)送前的 JSON.stringify()

使用 JSON.stringify() 序列化大型負(fù)載會(huì)阻塞事件循環(huán)。相反,使用流式多部分上傳或其他高效的序列化方法。

import { Readable } from'node:stream'; 

conststreamPayload = async (largeData) => {  
const encoder = newTextEncoder();  
const stream = Readable.from(  
    largeData.map(item => encoder.encode(JSON.stringify(item) + '\n'))  
  );  
awaitfetch('/bulk/ingest', { method: 'POST', body: stream }); 
};

這種方法即使在大型數(shù)據(jù)集的情況下也能保持內(nèi)存使用量低。

結(jié)論

優(yōu)化 await fetch() 的性能涉及解決多個(gè)瓶頸。從重用連接到切換到高效的流式格式,每個(gè)修復(fù)都對(duì)更快、更高效的網(wǎng)絡(luò)請(qǐng)求做出貢獻(xiàn)??紤]使用 Undici 進(jìn)行更快的請(qǐng)求,避免使用 JSON.stringify() 進(jìn)行不必要的序列化,并實(shí)施并發(fā)控制和緩存等策略,以顯著提高應(yīng)用的性能。

持續(xù)測(cè)試,定期測(cè)量性能,并考慮使用 GraphQL-over-HTTP/2、gRPC-web 或 msgpack 等替代方案進(jìn)一步優(yōu)化你的應(yīng)用。

原文地址:https://jsdev.space/await-fetch-slow/作者:jsdev

責(zé)任編輯:武曉燕 來(lái)源: 前端小石匠
相關(guān)推薦

2017-02-15 09:40:38

JavaScript分析解決

2020-09-09 10:00:41

JavaScript前端瓶頸

2025-10-27 02:11:00

2024-02-02 15:21:08

工具頁(yè)面性能

2022-04-29 15:24:53

Redis存儲(chǔ)慢查詢

2019-10-31 11:50:19

MySQL數(shù)據(jù)庫(kù)Windows

2022-07-15 08:52:03

Linux優(yōu)化

2024-11-25 07:00:00

2024-03-01 12:19:00

接口性能優(yōu)化

2021-01-24 11:46:26

自動(dòng)化Web 優(yōu)化

2010-03-31 10:25:41

MyEclipse

2013-11-26 13:23:14

WAN優(yōu)化Riverbed

2019-05-10 11:13:19

分析工具Java

2023-04-17 08:04:15

Redis性能內(nèi)存

2019-03-01 11:03:22

Lustre高性能計(jì)算

2024-01-25 16:19:27

2025-08-12 02:10:00

2011-12-12 16:27:02

筆記本方案匯總

2021-07-05 08:58:17

Golang分布式性能

2019-05-23 08:08:33

MySQL數(shù)據(jù)庫(kù)DBA
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

少妇荡乳情欲办公室456视频| 精品亚洲aⅴ无码一区二区三区| 免费在线观看的电影网站| 国产成都精品91一区二区三| 性欧美长视频免费观看不卡| 久久久久亚洲av无码a片| 电影一区二区三区久久免费观看| 亚洲成a人片在线不卡一二三区| 日韩国产一区久久| 亚洲精品人妻无码| 日本成人在线电影网| 色综合久久久888| 亚洲午夜精品久久久久久高潮| 日韩在线精品强乱中文字幕| 在线视频你懂得一区| 国产高清www| 欧美激情办公室videoshd| 99久久精品情趣| 亚洲字幕在线观看| 中文字幕在线播放av| 99精品福利视频| 久久这里只有精品视频首页| 国产毛片欧美毛片久久久| xvideos.蜜桃一区二区| 欧美日韩国产综合草草| www.亚洲天堂网| heyzo高清中文字幕在线| 亚洲欧美综合网| 日本在线观看一区| 欧美中文在线| 久久亚洲综合av| 国产精品一区二区三区观看| 99久久婷婷国产一区二区三区| 免费成人在线观看视频| 日本一区二区三区四区视频| 粉嫩aⅴ一区二区三区| 中文字幕免费一区二区三区| 中文字幕在线看视频国产欧美在线看完整 | 精品久久sese| 日本激情视频网站| 国产经典欧美精品| 91久久嫩草影院一区二区| 中文字幕+乱码+中文| 日韩综合在线视频| 欧美重口另类videos人妖| 日本在线观看视频网站| 亚洲高清av| 国模叶桐国产精品一区| 欧美片一区二区| 欧美人成网站| 欧美激情综合亚洲一二区| 黄色在线观看免费| 午夜精彩国产免费不卡不顿大片| 久久国产精品影视| 外国一级黄色片| 午夜亚洲福利| 久久久免费观看| 日韩网红少妇无码视频香港| 亚洲精品韩国| 欧美最猛性xxxx| 精品福利在线| 国产精品色呦呦| 亚洲一区二区高清视频| 成年人在线视频| 国产三级精品三级| 亚洲欧美电影在线观看| 黄色网在线免费观看| 亚洲激情在线激情| 国产原创popny丨九色| av资源在线看片| 日韩欧美在线中文字幕| 91激情视频在线| 国产高清亚洲| 精品国产乱码久久久久久久 | av成人老司机| 欧美日韩成人一区二区三区| 91精彩视频在线观看| 亚洲人成精品久久久久久| 久久久久久av无码免费网站下载| 欧美亚洲天堂| 色综合久久中文字幕综合网 | 国产精品男女视频| 日韩不卡一区二区三区| 亚洲影视九九影院在线观看| 日韩在线视频免费| 国产精品午夜久久| 国产亚洲精品久久久久久久| 欧美xxx性| 538在线一区二区精品国产| 欧美做受高潮中文字幕| av一区二区高清| 欧美肥老妇视频| 午夜久久久久久久久久影院| 国产精品一区二区三区乱码| 欧美精彩一区二区三区| 在线网址91| 日本韩国视频一区二区| 潘金莲一级淫片aaaaa| 国产成人精品一区二区免费看京 | 素人一区二区三区| 日韩欧美电影一二三| 91成人在线免费视频| 欧美视频导航| 成人激情视频在线| 男女污视频在线观看| 亚洲老司机在线| 日本新janpanese乱熟| 久久99国产精品久久99大师| 日韩在线观看免费高清| 在线免费黄色av| 国产精品一二三| 亚洲精品免费在线看| 欧美13videosex性极品| 日韩欧美精品在线| 中文字幕第24页| 国产精品呻吟| 国产精品一区而去| 黄色片网站在线| 欧美亚日韩国产aⅴ精品中极品| 欧亚乱熟女一区二区在线| 91精品亚洲| 国产精品人成电影| 青青操视频在线| 午夜一区二区三区视频| 日韩av影视大全| 色综合天天爱| 国产精品久久久久99| 欧美91精品久久久久国产性生爱| 亚洲一区二区免费视频| 亚洲一区二区中文字幕在线观看| 欧美色婷婷久久99精品红桃| 欧美专区在线观看| 深夜福利在线看| 天涯成人国产亚洲精品一区av| 日韩不卡的av| 91精品一区二区三区综合| 国产日韩综合一区二区性色av| yourporn在线观看中文站| 日韩欧美亚洲成人| 亚洲永久精品ww.7491进入| 国产精品亚洲欧美| 九九99玖玖| 日韩电影毛片| 日韩精品极品毛片系列视频| 日韩和一区二区| 99免费精品视频| 奇米精品一区二区三区| 激情小说亚洲色图| 91国产高清在线| 婷婷婷国产在线视频| 欧美日韩综合视频网址| 丰满少妇在线观看资源站| 国产精品外国| 日韩免费中文专区| 久久av影院| 久久夜色精品国产亚洲aⅴ| 99热这里只有精品5| 一区二区三区在线免费视频| ass极品水嫩小美女ass| 亚洲国产激情| 美乳视频一区二区| av成人在线观看| 久久精品青青大伊人av| 亚洲第一成年人网站| 午夜亚洲福利老司机| 右手影院亚洲欧美| 麻豆精品在线播放| 路边理发店露脸熟妇泻火| 成人爽a毛片| 欧美洲成人男女午夜视频| www免费网站在线观看| 91麻豆精品国产自产在线 | 色呦呦网站一区| 国精产品视频一二二区| 国产传媒一区在线| 欧美女人性生活视频| 日韩成人三级| 成人动漫视频在线观看完整版| www在线观看黄色| 中文字幕成人精品久久不卡| 国产欧美第一页| 激情久久av一区av二区av三区| 91中文字幕永久在线| 国产在线精品国自产拍免费| 日韩 欧美 视频| 日日天天久久| 国产精品精品视频| 丁香影院在线| 国产亚洲欧美日韩精品| www.色视频| 在线精品国精品国产尤物884a| 免费在线黄色网| 久久久欧美精品sm网站| 不卡的一区二区| 三级一区在线视频先锋| 久久福利一区二区| 欧美亚洲国产一区| 国产精品一区视频| 国产精品3区| 国产999在线| 里番在线播放| 日韩一区二区欧美| 青草久久伊人| 欧美va日韩va| 国产又粗又猛视频| 色综合久久88色综合天天6| 精品99久久久久成人网站免费 | 欧美精品一区二区三区视频| 中文在线免费观看| 欧美天堂在线观看| 久草视频精品在线| 中文字幕欧美一| 五月天精品视频| 99国内精品久久| 国产又粗又猛又爽又黄| 免费成人av在线播放| 日韩网址在线观看| 激情综合在线| 蜜桃视频一区二区在线观看| 日本女优一区| 色99中文字幕| 免费成人网www| 精品国产乱码久久久久久88av| 韩国三级成人在线| 国产一区深夜福利| 国产极品久久久久久久久波多结野| 欧美在线免费观看| 日本在线啊啊| 2020久久国产精品| 色在线免费观看| **欧美日韩vr在线| 日本а中文在线天堂| 性色av一区二区三区| 538视频在线| 国模视频一区二区| 国产美女高潮在线观看| 久久久久久高潮国产精品视| 青草在线视频在线观看| 欧美国产乱视频| 男女免费观看在线爽爽爽视频| 欧美人与性动交| 污污片在线免费视频| 欧美高清电影在线看| 韩国日本一区| 性欧美激情精品| 亚洲精品永久免费视频| 日本三级久久久| 五月激情久久| 国产精品狼人色视频一区| 欧美大片1688网站| 国产日本欧美视频| 精品视频91| 国产精品乱码一区二区三区| 欧美交a欧美精品喷水| 欧美不卡福利| 成人vr资源| 熟女熟妇伦久久影院毛片一区二区| 自产国语精品视频| 成年人网站国产| 亚洲综合日韩| 激情五月俺来也| 国产精品中文字幕日韩精品 | a级片免费观看| 欧美va日韩va| 欧美日韩激情视频一区二区三区| 在线性视频日韩欧美| 国产人成网在线播放va免费| 孩xxxx性bbbb欧美| 福利在线免费视频| 国产精品视频xxxx| 日韩免费一级| 久久精品一二三区| 91综合视频| 国产一区二区视频播放| 日本强好片久久久久久aaa| 日韩va在线观看| 99久久99久久综合| 国产又粗又长又硬| 亚洲成av人**亚洲成av**| 波多野结衣黄色| 日韩欧美一级片| 看电影就来5566av视频在线播放| 久久精彩免费视频| 手机在线理论片| 成人网址在线观看| 香蕉久久夜色精品国产更新时间| 在线观看日韩片| 国产精品五区| 曰本三级日本三级日本三级| 国产午夜亚洲精品午夜鲁丝片| 日本a级片视频| 色婷婷综合视频在线观看| www香蕉视频| 中文字幕日韩电影| 亚洲电影观看| 亚洲sss综合天堂久久| 国产一区二区三区四区五区| 91网站在线观看免费| 免费观看在线综合| 日本一区二区在线免费观看| 亚洲视频一区在线观看| 一级黄色av片| 亚洲福利视频免费观看| 黄色网在线免费观看| 国产精品福利久久久| 精品午夜电影| 日本a在线天堂| 久久国产精品99久久人人澡| 久久午夜夜伦鲁鲁片| 亚洲精品成人精品456| 中文字幕人妻色偷偷久久| 日韩大片免费观看视频播放| 肉体视频在线| 亚洲bt欧美bt日本bt| 久久电影院7| 污版视频在线观看| 久久久99免费| 一级黄色免费网站| 亚洲国产另类久久精品 | 色777狠狠狠综合伊人| 99福利在线观看| 不卡av在线免费观看| 美女视频黄免费| 91精品国产综合久久香蕉的特点 | 中文字幕av一区二区三区人| 岛国大片在线播放| 国产成人午夜精品5599| 99鲁鲁精品一区二区三区| 精品视频色一区| 一区二区高清不卡| 国产精品久久久久久影视| 久久99国产成人小视频| 少妇性饥渴无码a区免费| 91在线码无精品| 国产午夜免费福利| 亚洲色图美腿丝袜| 欧美黑人一区| 日韩中文一区| 男人的j进女人的j一区| 东京热无码av男人的天堂| 欧美日韩视频在线观看一区二区三区 | 一区二区传媒有限公司| 99re6这里只有精品视频在线观看| 久久久一区二区三区四区| 日韩精品一区二区三区中文不卡 | 国产成人精品久久二区二区91| 国产精选一区| 中文字幕av专区| 亚洲日本一区二区三区| japanese国产| 国内精品美女av在线播放| 欧美精品中文字幕亚洲专区| 成熟老妇女视频| 国产精品久久久久久久久快鸭| 91午夜交换视频| 欧美裸体xxxx极品少妇| jizz18欧美18| 国产精品wwwww| 国产精品久久久久精k8| 精品国产av 无码一区二区三区| 欧美高清在线观看| 日韩精品社区| 在线观看免费黄网站| 亚洲人成人一区二区在线观看| 人妻一区二区三区免费| 青草热久免费精品视频| 日韩激情图片| 国产xxx在线观看| 日韩欧亚中文在线| 男人和女人做事情在线视频网站免费观看 | 精品视频在线观看一区二区| 91一区二区三区在线观看| 国产情侣呻吟对白高潮| 欧美成在线观看| 亚洲另类av| 中文av字幕在线观看| 亚洲国产成人精品视频| 草草影院在线观看| 产国精品偷在线| 视频一区二区国产| 久久中文字幕无码| 亚洲性无码av在线| 亚洲精品一区二区三区在线| 国产情侣av自拍| 亚洲精品免费看| 男男激情在线| 成人免费看片网址| 免费成人在线网站| 国产精品7777777| 日日噜噜噜夜夜爽亚洲精品| 久久男人av| 四虎成人在线播放| 欧洲av一区二区嗯嗯嗯啊| 好吊日av在线| 最新国产精品久久| 久久久国产精品午夜一区ai换脸| 亚洲精品久久久狠狠狠爱| 国产精品久久视频| 99国产精品| 久久久久久激情|