前端優化之高併發處理

肥晨發表於2022-01-21

大部分的高併發處理基本都是在後端處理,但是在部分特殊情況下,後端無法阻止使用者行為,需要前端做配合。例如在搶購、秒殺等場景。

高併發是什麼?

對此,我們首先需要簡單的去了解一下,高併發是什麼?

高併發是指在極短單位時間內,有很多使用者同時的訪問同一 API 介面或者 Url 地址,造成極多個請求同時發起到伺服器。它經常會發生在有大活躍使用者量,使用者高聚集的業務場景中。

瀏覽器請求限制

瀏覽器在向後端傳送http請求是,就會有高併發處理。使用HTTP/2.0,理論上HTTP/2.0協議支援在同一個TCP連線上傳送無限個HTTP請求,且這些請求的生命期可以重疊。但是實際上,瀏覽器並不會同時將所有請求就發過去,還是會有時間間隔。

前端可以做些什麼?

雖然瀏覽器已經對 http 請求併發設定了限制,但是並不能很好的處理掉不必要的請求。而且在部分情況下,使用者較多,並且在同一時間端多次請求,如圖:

(瀏覽器到伺服器部分的請求會被後臺拒掉甚至可能會導致後臺崩潰)

 

瀏覽器並不會過濾掉一部分請求,只是會分批傳送。這時候極有可能會造成卡頓,甚至崩潰。所以如果,在瀏覽器傳送請求時,可以杜絕掉一部分非必要請求就好了。

 

 處理方法

圖片方面

1.CSS sprites

俗稱 CSS 精靈、雪碧圖,雪花圖等。即將多張小圖片合併成一張圖片,達到減少 HTTP 請求的一種解決方案。可通過 CSS中的background 屬性訪問圖片內容。這種方案同時還可以減少圖片總位元組數,節省命名詞彙量。

2.壓縮圖片

圖片佔據資源極大,因此儘量避免使用多餘的圖片,使用時選擇最合適的格式大小,然後使用智圖壓縮,同時在程式碼中用Srcset來按需顯示。(切記不要過分壓縮 可能會導致圖片迷糊)

3.圖片使用Base64編碼

減少頁面請求數,採用Base64的編碼方式將圖片直接嵌入到網頁中。(但是這樣做會有一個弊端,就是base64解碼也是需要消耗時間的)

檔案方面

1.合井指令碼和樣式表

將部分js和css模組合併,多個合併為單個。(無需過度合併,要考慮後期接你程式碼的兄弟)減少請求次數。

程式碼壓縮

1.js 代 碼 壓 縮

JavaScript 壓 縮 的 原 理 一 般 是 去 掉 多 餘 的 空 格 和 回 車 、 替 換 長 變 量 名 、 簡 化 一 些 代 碼 寫 法 等 (有的時候簡化寫法效能可能會降低,這點按照實際情況來吧)。

2.css 代 碼 壓 縮

原理和JS壓縮原理類似,同樣是去除空白符、註釋井且優化一些css語義規則等。(去除註釋這種陰間操作的話,我們儘量不做昂)

過濾請求

1.減少訪問API或者不訪問

使用防抖節流等方式,降低請求次數。例如1秒只許點選1次。

2.利用快取存放資料

將一些實時性修改,但是不必須傳送給後端儲存的資料,放在快取中。例如修改頭像,但是還沒點確定修改時。

3.避免高頻重新整理頁面獲取資料

 做一個限定,避免高頻重新整理帶給伺服器的壓力。例如可以幾秒內重新整理頁面中,只獲取一次頁面樣式或者列表等資料。

相關文章