web 效能優化

2021-10-25 05:21:15 字數 2975 閱讀 4204

優化方向有兩個:

http 請求

js 載入

開啟瀏覽器控制台的網路,可以看到從拉取模版開始到首次渲染中間到底在載入什麼,如果中間某些資源載入速度過慢,則可以從這方面入手,否則的話有可能是解析 js 速度過慢導致。

請求優化

合理使用快取

合理使用快取,降低請求等待的時間,可以通過達到效能優化

cdn 內容分發

將非核心資源通過 cdn 的方式進行分發,例如使用的第三方庫(react、vue、地圖等),可以有效減小請求包的體積,同時穩定高速的 cdn 伺服器也可以加快請求的速度。

cdn 通常會配合非同步載入一起使用。

優化

使用合適的格式作為**的,比如 webp。具體看優化 。

隨著時間的推移,遷移到 http/2 是不可避免的。目前瀏覽器對於 http/2 的支援度都非常友好,同時相對於 http/1,http/2 在效能上有著非常顯著的提公升http版本

資源壓縮

目前瀏覽器大多都支援對壓縮資源進行載入,比如 js、css 的 gzip。開啟壓縮後,會讓資源的體積減小,從而降低請求時間。

載入優化

拆包

在不配置拆包的情況下,webpack 會將所有的資源都打包在乙個 js 檔案中,這無疑會讓請求時候的響應體積變得非常大,從而降低載入速度。

同時,不配置拆包,會在首次載入的時候載入一些無關的資源,浪費了一次寶貴的請求。

合理配置拆包,讓每次請求都只請求對應的核心資源,從而達到按需載入的程度。

拆包通常的邏輯:

1. 業務**和第三方依賴進行拆分

2. 對於第三方依賴:

將版本經常變動的與版本不怎麼變動的進行拆分

版本不怎麼變動的依賴可以合理配置 cdn

3. 對於業務**:

將業務模組和公共模組進行拆分

業務模組也根據呼叫的次數進行拆分

將首屏模組單獨進行拆分

非同步載入

非核心的資源不需要在拉取模版之後立馬就載入,可以使用非同步載入,讓這些非核心資源在檢視構建完畢以後再進行載入

預載入

與首屏優化一樣,路由跳轉優化也是非常關鍵。我們可以通過判斷是否需要進行路由跳轉,在跳轉之前做一些提前載入,從而達到跳轉完成之後,資源立馬載入完畢的效果從而提公升載入速度

合理配置打包版本

首先我們需要明確一點,一般情況下,隨著新標準的制定,瀏覽器廠商通常會著重對新標準的效能進行優化,而老標準的優化頻率會慢慢降低,所以,我們編碼的目標便是面向未來程式設計。

另外,目前我們主要是用 es6+ 或 ts 進行編碼,經過打包工具構建之後,效能往往比不上手寫的**,雖然隨著工具的公升級,效能會越來越好,但是編譯後的**,尤其是對 class **的編譯,效能下降是非常明顯的。

最後,編譯後**的體積會出現膨脹的情況,編譯器使用了很多技巧來將 es6 轉換成 es5,所以使用 es6 版本會讓體積更小。

目前主流瀏覽器對於 es6 的支援越來越好,打包的時候可以設定兩個構建,對於支援度較好的瀏覽器版本,使用更高階的版本,從而達到減小包的體積來達到更快的載入速度。

同時,可以使用 的方式來實現動態載入 es6 **,詳情可以檢視隨著 vue3 一起發布的 vite。

搖樹

我們可能在編碼過程中會書寫一些無用**,但是這些無用**卻會被打包構建工具與核心資源打包在一起,這無疑會增大請求時相應的體積,從而影響我們載入的速度。所以在打包過程中使用搖樹的方式,可以將無用的**清除,從而減小包的體積來達到效能提公升。

多執行緒

現代瀏覽器大都支援 worker,這是一種瀏覽器實現多執行緒的方式,他可以與 js 執行緒、gui 執行緒同時執行,通過 worker,我們可以將一些複雜繁瑣的操作交給子執行緒來完成,從而避免渲染執行緒的阻塞,來達到效能的優化。

但是,執行緒之間的通訊是需要消耗時間的,所以多執行緒技術應該合理地使用。

使用外鏈樣式而非內聯樣式

瀏覽器對於外鏈樣式處理的速度會比內聯樣式更快,這也是為什麼 style-components 這麼火的原因。

同時優先使用瀏覽器的 html 標籤 link,而不是 css 中的 @import,原因在於 link 的載入是和 gui 執行緒並行的,但是 @import 需要等待 html 完全處理完成之後再進行載入。

體驗優化

骨架屏

使用 loading 圖或者是骨架屏,可以一定程度上減少使用者等待載入的焦慮感,讓使用者感覺沒有等太久,這就是使用者體驗級的優化。

服務端渲染

在條件允許的情況下,將客戶端渲染遷移到服務端渲染,利用服務端高效能的表現,可以實現使用者拉去到模版之後立馬顯示檢視,省去中間 js 載入的過程。

動畫

直接操作 dom,有可能會引起大面積的重排和重繪,從而引起掉幀的情況,導致使用者體驗下降。

合理使用 css3 gpu 加速,可以避免使用動畫之後的重排和重繪,達到更流暢的動畫效果。

有一說一,開啟 css3 gpu 加速是非常消耗功耗的,所以在移動端上面謹慎使用。

虛擬滾動

我們知道,頁面進行滾動的時候,也會觸發瀏覽器的重排,如果此時前端需要渲染大量資料,而且還不允許分頁,這種情況下會導致瀏覽器的掉幀、卡頓甚至假死的情況。

這種情況下,如果不能使用分頁進行優化,通常我們會使用虛擬滾動的方式來解決問題。

因為 dom 元素的建立和渲染需要的時間成本很高,在大資料的情況下,完成渲染列表所需要的時間不可接受,所以我們可以只渲染可視區域,從而達到極高的初次渲染效能。

Web效能優化

我們先來看乙個瀑布圖來確定乙個頁面效能問題是由哪些項造成的。chorome 自帶開發人員工具 圖中每一行表示乙個 請求,每乙個請求都有一條時間線,用於標識這個請求所花費的時間。如果將滑鼠放到某一條時間線上,可以看到以下資訊 1 首先看一下哪個請求花費的時間比較長,看看這個請求的時間線資訊,確定是伺服...

web效能優化

可以用gulp的gulp uglify gulp minify css模組完成 還可以用webpack的uglifyjsplugin壓縮外掛程式完成。通過css sprites將多個整合到乙個中,在用css來定位。伺服器在處理大流量的資料是十分困難的,這最終導致頁面載入速度變慢。cdn是位於全球不同...

Web效能優化

我們先來看乙個瀑布圖來確定乙個頁面效能問題是由哪些項造成的。chorome自帶開發人員工具 圖中每一行表示乙個http請求,每乙個請求都有一條時間線,用於標識這個請求所花費的時間。如果將滑鼠放到某一條時間線上,可以看到以下資訊 網域名稱解析 搜尋dns伺服器並解析網域名稱為ip位址所花費的事件,這裡...