2026年3月13日 星期五

前端高併發情境範例

今天面是被問一題,高併發你怎麼處理,我講完後對方不滿意,是後回想才知道對方需要我設立情境,啊我也沒什麼遇過,所以當下完全想像不到,我想說高併發不是後端要處理的嗎,問完AI後才發現前端也有其相對情境,雖然真正遇到時一樣半小時查一下就知道該怎麼寫,但這些公司就是很愛問,所以紀錄一下

前端高併發情境設計指南

在高併發情境下,前端的核心目標不再只是「呈現數據」,而是**「流量削峰」「壓力隔離」**。透過將壓力擋在前端或邊緣端,可以有效防止後端資料庫因瞬間湧入的請求而崩潰。

核心設計原則

  • 動靜分離:將不常變動的 HTML/JS/CSS 與靜態素材(圖片、影片)佈署於 CDN,減少對應用伺服器的直接請求。

  • 請求削峰:利用緩衝、延遲或合併請求的方式,平滑化流量尖峰。

  • 客戶端降級:當系統負載過高時,主動關閉非核心功能(如:預測搜尋、即時進度更新)。


代表性情境範例

1. 電商秒殺/搶購系統 (Rush Sale)

這是最典型的高併發情境,數百萬用戶在同一秒點擊按鈕。

  • 前端應對策略

    • 按鈕防抖與置灰:點擊後立即禁用按鈕,防止重複送出請求。

    • 靜態資源預熱:在活動開始前,利用 Service Worker 預先下載活動頁面所需的圖片與腳本。

    • 排隊等待機制:前端發送請求後進入輪詢或 WebSocket 狀態,顯示「排隊中」而非直接報錯,提升用戶心理預期。

    • 驗證碼與異步化:透過驗證碼強制拉長用戶的操作路徑,分散瞬間請求壓力。

2. 大數據流與無限捲動列表 (Infinite Scroll)

在社交平台(如 Threads、Instagram)或新聞資訊流,快速滑動會產生大量 API 請求。

  • 前端應對策略

    • 虛擬列表 (Virtual List):只渲染當前視窗(Viewport)可見的 DOM 節點。即使有 10 萬筆資料,記憶體中也只維持 10-20 個節點,避免瀏覽器崩潰。

    • 分頁請求與預加載:設定滑動閾值,在用戶滑到剩下 20% 時才發送下一頁請求。

    • 請求取消 (AbortController):當用戶快速切換分類或滑動過快時,主動取消尚未完成的舊請求。

3. 即時互動與直播間彈幕 (Live Streaming Chat)

直播間數萬人同時發言時,頻繁的 DOM 更新與網路通訊是效能瓶頸。

  • 前端應對策略

    • 彈幕池緩衝:不要收到一則彈幕就渲染一次。建立緩衝池(Buffer),每隔 500ms 批量渲染一次。

    • 頻率限制與過濾:前端根據等級或關鍵字過濾次要訊息,或在本地限制用戶的發言頻率。

    • Canvas 渲染:針對海量彈幕,放棄使用 DOM 節點,改用 Canvas 繪製以獲得更高的渲染幀數。


總結技術清單

技術手段解決的問題應用範例
CDN / Edge減少伺服器頻寬壓力全域靜態檔案分發
Service Worker離線緩存與預加載秒殺頁面預熱
Debounce / Throttle過度頻繁的觸發搜尋框、視窗縮放
Request Batching減少 HTTP 請求數量點讚數合併計算
所以這樣看起來前端要做的就是防止伺服器端爆炸減少需求發生.....早說嗎,我想說高併發關前端啥事==

沒有留言:

張貼留言