<cite id="ffb66"></cite><cite id="ffb66"><track id="ffb66"></track></cite>
      <legend id="ffb66"><li id="ffb66"></li></legend>
      色婷婷久,激情色播,久久久无码专区,亚洲中文字幕av,国产成人A片,av无码免费,精品久久国产,99视频精品3
      網易首頁 > 網易號 > 正文 申請入駐

      fetch()埋了3個坑,Netflix工程師踩過才敢說

      0
      分享至


      一個按鈕點下去,下午用戶就開始 rage-clicking。界面顯示的數據亂序、更新丟失、隨機報錯——你本地復現不了,線上卻真實發生。

      這就是玩具級 fetch() 和生產級網絡層的差距。Netflix 工程團隊在 2019 年的技術博客中披露,他們的客戶端曾因請求競態導致播放記錄錯亂,用戶看完一集后進度條回退到上一集。問題根源不是后端,而是前端沒做請求排序控制。

      本文用一個票務排隊系統演示:從單請求到完整生產方案,逐步疊加排序、失敗處理、重試、取消等機制。所有代碼在 GitHub 倉庫 js-fetch-production-demo 可運行,包含 Express 后端和原生 JS 前端。

      慢網絡和亂序響應:為什么先發的請求會后到

      后端接口 GET /tickets/:id/nextNumber 每次返回遞增的票號。理想情況下,請求 A 先發出,返回 1;請求 B 后發出,返回 2。但網絡不保證順序。

      模擬延遲后,問題暴露:請求 A 耗時 200ms,請求 B 耗時 50ms。用戶先點 A 再點 B,界面卻先顯示 2,后顯示 1。這就是競態條件(race condition)。

      解決方案:為每個請求附加序列號,只接受最新請求的結果。代碼層面,維護一個遞增的 requestId,響應返回時比對:if (responseId !== currentId) return;。老響應直接丟棄,界面永遠顯示最新數據。

      Netflix 的 RxJS 實現中,這個模式叫 switchMap——新請求發出時自動取消對老響應的訂閱。原生 JS 里用 AbortController 也能做到,但更簡單的方式是版本號比對。

      關鍵細節:requestId 必須在發送前遞增,而不是收到響應后。否則兩個請求幾乎同時發出時,仍會拿到相同的 ID。

      HTTP 錯誤和不可靠響應:200 不等于成功

      fetch() 不會為 HTTP 錯誤碼拋出異常。404、500 都走正常 resolve,只有網絡完全斷開才會 reject。這是設計上的坑,很多開發者踩過。

      生產級代碼需要手動檢查:if (!res.ok) throw new Error(res.status)。但還不夠——后端可能返回 200,但 body 是 HTML 錯誤頁(比如 CDN 回源失敗)。

      更隱蔽的是超時。fetch() 沒有內置超時,瀏覽器默認等待時間長達幾分鐘。用戶早就關閉頁面了,請求還在后臺掛起。

      用 AbortController 封裝超時:

      const controller = new AbortController();

      setTimeout(() => controller.abort(), 5000);

      const res = await fetch(url, { signal: controller.signal });

      超時后 fetch 拋出 AbortError,需要單獨捕獲處理。注意:abort 后的請求無法復用,必須新建 controller。

      自動重試:瞬態故障的自救

      移動網絡切換 WiFi、CDN 邊緣節點重啟、數據庫主從延遲——這些故障通常幾秒后自愈。直接報錯太粗暴,無腦重試又會壓垮已過載的服務。

      指數退避(exponential backoff)是標準答案:第 1 次等 100ms,第 2 次等 200ms,第 3 次等 400ms。但純指數增長在分布式系統中會引發"驚群效應"——所有客戶端同時重試,瞬間打爆服務。

      加入隨機抖動(jitter):實際延遲 = base * 2^attempt + random(0, 100)。AWS SDK 和 Kubernetes 的 client-go 都采用類似策略。

      重試次數要有上限,且只對特定錯誤重試。4xx 客戶端錯誤重試無意義,5xx 和超時才可以。429 Too Many Requests 要特殊處理:響應頭里的 Retry-After 優先級高于退避算法。

      關鍵細節:重試必須搭配冪等性設計。POST 創建資源時,服務端需要支持去重鍵(idempotency key),否則重試會導致重復創建。

      生產級模式:從可用到優雅

      基礎功能補齊后,還有四個進階課題:

      請求合并(coalescing):100 個組件同時請求同一資源,只發 1 個請求,結果共享。React Query 和 SWR 的緩存層做這個,原生實現需要維護 in-flight promise 的 Map。

      熔斷(circuit breaker):連續失敗 5 次后,直接拒絕后續請求 30 秒,給后端恢復窗口。Netflix 的 Hystrix 庫帶火了這個模式,現在瀏覽器端也可用 opossum 等庫實現。

      速率限制(rate limiting):用戶瘋狂點擊時,前端先限流,而不是把壓力傳導到后端。令牌桶算法適合客戶端:每秒生成 2 個令牌,每個請求消耗 1 個,沒令牌就排隊或拒絕。

      緩存策略:HTTP 緩存頭(Cache-Control、ETag)是第一道防線,但 SPA 中更常用內存緩存。關鍵決策:緩存多久?如何失效?樂觀更新(optimistic update)還是等響應確認?

      這些不是都要做。票務系統需要排序和重試,但可能不需要熔斷;實時聊天需要取消和合并,但緩存策略完全不同。工具箱里的選項,根據場景挑選。

      特別聲明:以上內容(如有圖片或視頻亦包括在內)為自媒體平臺“網易號”用戶上傳并發布,本平臺僅提供信息存儲服務。

      Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

      相關推薦
      熱點推薦
      退役11年,周薪仍超9萬鎊!亨利這是妥妥的人生贏家

      退役11年,周薪仍超9萬鎊!亨利這是妥妥的人生贏家

      樂道足球
      2026-04-07 17:17:10
      美伊停火協議細節公布!黃金直線拉升,國際油價大跳水,股市巨震

      美伊停火協議細節公布!黃金直線拉升,國際油價大跳水,股市巨震

      魯中晨報
      2026-04-07 07:21:14
      韓國政府就特朗普涉韓不滿言論作出回應:已向美方詢問其有關言論的真實意圖

      韓國政府就特朗普涉韓不滿言論作出回應:已向美方詢問其有關言論的真實意圖

      財聯社
      2026-04-07 17:58:12
      里夫斯+東契奇都去歐洲,湖人:這就有點離譜

      里夫斯+東契奇都去歐洲,湖人:這就有點離譜

      體育新角度
      2026-04-07 18:53:49
      張蘭生日!情緒低落發文,兒子兒媳沒送祝福,只有一人記得她生日

      張蘭生日!情緒低落發文,兒子兒媳沒送祝福,只有一人記得她生日

      好賢觀史記
      2026-04-07 16:41:38
      潘石屹再預言未來樓市,前兩次已應驗,今明兩年或大概率也是對的

      潘石屹再預言未來樓市,前兩次已應驗,今明兩年或大概率也是對的

      專業聊房君
      2026-04-06 17:35:09
      一個飛行員,美國為什么下這么大血本?1979年的教訓,至今不敢忘

      一個飛行員,美國為什么下這么大血本?1979年的教訓,至今不敢忘

      文史達觀
      2026-04-07 06:45:06
      湖北發布社會公眾風險提示:強對流來襲,局地有冰雹

      湖北發布社會公眾風險提示:強對流來襲,局地有冰雹

      界面新聞
      2026-04-07 13:32:37
      周總理好心建議賀龍搬出中南海,賀龍:我沒想到把我看成這種人

      周總理好心建議賀龍搬出中南海,賀龍:我沒想到把我看成這種人

      北海史記
      2026-04-07 17:16:32
      高明沒想到,兒子去世一年后,沒有帶娃改嫁的兒媳,成了他的救贖

      高明沒想到,兒子去世一年后,沒有帶娃改嫁的兒媳,成了他的救贖

      米果說識
      2026-04-07 14:43:21
      現役球員進NBA名人堂的概率!4人100%,哈登99%,利拉德出乎意料

      現役球員進NBA名人堂的概率!4人100%,哈登99%,利拉德出乎意料

      麥子的籃球故事
      2026-04-07 17:44:51
      1977年,李敏見到失散多年的親姐楊月花,楊月花卻向李敏提一要求

      1977年,李敏見到失散多年的親姐楊月花,楊月花卻向李敏提一要求

      磊子講史
      2025-12-23 20:04:20
      中美俄雷達差距太大!俄預警6000公里,美5500公里,中國令人意外

      中美俄雷達差距太大!俄預警6000公里,美5500公里,中國令人意外

      阿器談史
      2026-04-02 15:36:40
      攤牌了?勇士潛在3換1交易,巴特勒或成犧牲品,庫卡欲聯手沖冠

      攤牌了?勇士潛在3換1交易,巴特勒或成犧牲品,庫卡欲聯手沖冠

      毒舌NBA
      2026-04-07 09:07:23
      “最美趙敏”,去世3天才被發現!

      “最美趙敏”,去世3天才被發現!

      大中國
      2026-04-07 15:10:47
      緬甸變天!敏昂萊上位總統,對中國意味著什么?

      緬甸變天!敏昂萊上位總統,對中國意味著什么?

      古事尋蹤記
      2026-04-07 07:16:38
      伊朗宣布決定,霍爾木茲海峽通航,高人指點,打起石油持久戰

      伊朗宣布決定,霍爾木茲海峽通航,高人指點,打起石油持久戰

      諦聽骨語本尊
      2026-04-07 12:19:22
      中國網友冤枉松島輝空了!非故意不與王楚欽握手:當時根本沒法握

      中國網友冤枉松島輝空了!非故意不與王楚欽握手:當時根本沒法握

      風過鄉
      2026-04-07 19:32:29
      打虎!王文靈被查

      打虎!王文靈被查

      新京報政事兒
      2026-04-07 17:49:08
      瑞幸咖啡緊急撤下羅永浩代言廣告,網友:數據影響下的現實切割!

      瑞幸咖啡緊急撤下羅永浩代言廣告,網友:數據影響下的現實切割!

      玖宇維
      2026-04-07 15:12:41
      2026-04-07 21:51:00
      灰度測試中
      灰度測試中
      生活正在重構,目前還在灰度測試階段,暫不全量發布。
      888文章數 12關注度
      往期回顧 全部

      科技要聞

      滿嘴謊言!OpenAI奧特曼黑料大起底

      頭條要聞

      臺灣一些人被指準備"潤" 賴清德曾稱兒子在美"學功夫"

      頭條要聞

      臺灣一些人被指準備"潤" 賴清德曾稱兒子在美"學功夫"

      體育要聞

      官宣簽約“AI球員”,這支球隊被罵慘了...

      娛樂要聞

      女首富陳麗華離世 被曝生前已分好遺產

      財經要聞

      10萬億財政轉移支付,被誰拿走了?

      汽車要聞

      不止是大 極狐首款MPV問道V9靜態體驗

      態度原創

      時尚
      教育
      本地
      親子
      旅游

      針織衫+闊腿褲=氣質穿搭

      教育要聞

      地理教材上五種交通運輸方式的比較是不是過時了?

      本地新聞

      跟著歌聲游安徽,聽古村回響

      親子要聞

      科普|科學備孕,需要做好哪些孕前檢查?

      旅游要聞

      日照嵐山這個清明假期“熱”了,也更“火”了!

      無障礙瀏覽 進入關懷版