移動端瀏覽器前端優(yōu)化策略小結(jié)

移動端的特點:設(shè)備屏幕較小、新特性兼容性較好、支持一些較新的 HTML5 和 CSS3 特性、需要與 Native 應(yīng)用交互等。但移動端可用計算資源和網(wǎng)絡(luò)資源極為有限,所以要做好移動端上的優(yōu)化往往需要做更多的事情。
網(wǎng)絡(luò)加載類
首屏數(shù)據(jù)請求提前
首屏數(shù)據(jù)請求提前,避免在 JavaScript 加載完成后才去后端請求數(shù)據(jù)。通常數(shù)據(jù)請求是頁面內(nèi)容渲染中關(guān)鍵路徑最長的部分,而且不能并行,所以如果能將數(shù)據(jù)請求提前,可以很大程度上縮短頁面內(nèi)容的渲染時間。
首屏加載和按需加載
移動端網(wǎng)絡(luò)資源有限,為了盡快完成頁面內(nèi)容的加載,需要保證首屏加載資源最小,非首屏內(nèi)容使用滾動的方式異步加載。一般推薦移動端頁面首屏數(shù)據(jù)展示延時最長不超過3秒。
inline 首屏必備的 CSS 和 JavaScript
為了在 HTML 加載完成時能使瀏覽器中有基本的樣式,需要將頁面渲染時必備的 CSS 和 JavaScript 通過 <script> 或 <style> 內(nèi)聯(lián)到頁面中,避免頁面 HTML 載入完成到頁面內(nèi)容展示這段過程中頁面出現(xiàn)空白。
模塊化資源并行下載
盡量保證 JavaScript 資源并行加載,主要指的是模塊化 JavaScript 資源的異步加載,例如AMD的異步模塊,使用并行的加載方式能夠縮短多個文件資源的加載時間。
meta dns prefetch 設(shè)置 DNS 預(yù)解析
設(shè)置文件資源的 DNS 預(yù)解析,讓瀏覽器提前解析獲取靜態(tài)資源的主機(jī) IP,避免等到請求時才發(fā)起 DNS 解析請求。
<meta http-equiv="x-dns-prefetch-control" content="on" > <link rel="dns-prefetch" href="//cdn.domain.com" >
資源預(yù)加載
對于移動端首屏加載后可能會被使用的資源,需要在首屏完成加載后盡快進(jìn)行加載,保證在用戶需要瀏覽時已經(jīng)加載完成。
利用MTU策略
通常情況下,我們 TCP 網(wǎng)絡(luò)傳輸?shù)淖畲髠鬏攩卧∕aximum Transmission Unit,MTU)為 1500B,即一個RTT(Round-Trip Time,網(wǎng)絡(luò)請求往返時間)內(nèi)可以傳輸?shù)臄?shù)據(jù)量最大為 1500 字節(jié)。因此,在前后端分離的開發(fā)模式中,盡量保證頁面的 HTML 內(nèi)容在 1KB 以內(nèi),這樣整個 HTML 的內(nèi)容請求就可以在一個 RTT 內(nèi)請求完成,最大限度地提高 HTML 載入速度。
緩存類
利用瀏覽器緩存
使用 Cache-Control、Expires、Etag 和 Last-Modified 來設(shè)置 HTTP 緩存,還可以使用 localStorage 等來保存從接口返回的數(shù)據(jù),或者使用 localStorage 保存 CSS 或 JavaScript 靜態(tài)資源內(nèi)容,實現(xiàn)移動端的離線應(yīng)用,盡可能減少網(wǎng)絡(luò)請求,保證靜態(tài)資源內(nèi)容的快速加載。
靜態(tài)資源離線方案
對于移動端或 Hybrid 應(yīng)用,可以設(shè)置離線文件或離線包機(jī)制讓靜態(tài)資源請求從本地讀取,加快資源載入速度,并實現(xiàn)離線更新。
嘗試使用 AMP HTML
使用 AMP Component 中的元素來代替原始的頁面元素進(jìn)行直接渲染。
圖片類
圖片壓縮處理
保證頁面中所有用到的圖片都是經(jīng)過壓縮優(yōu)化處理的,而不是以原圖的形式使用的。
使用較小的圖片,合理使用 base64 內(nèi)嵌圖片
將小于2kb的圖片轉(zhuǎn)化成 base64 編碼嵌入到 HTML 頁面或 CSS 文件中,減少頁面的 HTTP 請求數(shù)。
使用更高壓縮比格式的圖片
使用具有較高壓縮比格式的圖片,如 webp(需要設(shè)計降級兼容方案)等。在同等圖片畫質(zhì)的情況下,高壓縮比格式的圖片體積更小,能夠更快完成文件傳輸,節(jié)省網(wǎng)絡(luò)流量。
圖片懶加載
為了保證頁面內(nèi)容的最小化,加速頁面的渲染,盡可能節(jié)省移動端網(wǎng)絡(luò)流量,頁面中的圖片資源推薦使用懶加載實現(xiàn),在頁面滾動時動態(tài)載入圖片。
使用 MediaQuery 或 srcset 根據(jù)不同屏幕加載不同大小圖片
針對不同的移動端屏幕尺寸和分辨率,輸出不同大小的圖片或背景圖能保證在用戶體驗不降低的前提下節(jié)省網(wǎng)絡(luò)流量,加快部分機(jī)型的圖片加載速度。
使用 iconfont 代替圖片圖標(biāo)
在頁面中盡可能使用 iconfont 來代替圖片圖標(biāo),因為 iconfont 體積較小,而且是矢量圖,因此縮放時不會失真;還可以方便地修改圖片大小尺寸和呈現(xiàn)顏色。
定義圖片大小限制
加載的單張圖片一般建議不超過 30KB,避免大圖片加載時間長而阻塞頁面其他資源的下載。
腳本類
盡量使用 id
選擇器選取頁面 DOM 元素時盡量使用 id 選擇器,因為 id 選擇器速度最快。
合理緩存 DOM 對象
對于需要重復(fù)使用的 DOM 對象,要優(yōu)先設(shè)置緩存變量,避免每次使用時都要從整個DOM樹中重新查找。
頁面元素盡量使用事件代理,避免直接事件綁定
使用事件代理可以避免對每個元素都進(jìn)行綁定,并且可以避免出現(xiàn)內(nèi)存泄露及需要動態(tài)添加元素的事件綁定問題,所以盡量不要直接使用事件綁定。
使用 touchstart 代替 click
在移動端 touchstart 事件和 click 事件觸發(fā)時間之間存在 300 毫秒的延時,在頁面中沒有實現(xiàn) touchmove 滾動處理的情況下,可以使用 touchstart 事件來代替元素的 click 事件,加快頁面點擊的響應(yīng)速度,提高用戶體驗。但同時我們也要注意頁面重疊元素 touch 動作的點擊穿透問題。
避免 touchmove、scroll 連續(xù)事件處理
對 touchmove、scroll 這類可能連續(xù)觸發(fā)回調(diào)的事件設(shè)置事件節(jié)流,例如設(shè)置每隔 16ms(60 幀的幀間隔為 16.7ms,因此可以合理地設(shè)置為 16ms )才進(jìn)行一次事件處理,避免頻繁的事件調(diào)用導(dǎo)致移動端頁面卡頓。
渲染類
使用 Viewport 固定屏幕渲染
在移動端設(shè)置 Viewport 可以避免縮放導(dǎo)致頁面重排重繪。在移動端固定 Viewport 設(shè)置的方法如下。
<!--設(shè)置viewport不縮放--> <meta name="viewport" content="width=device-width,initial-scale=1.0,maximum-scale=1.0,user-scalable=no">
避免各種形式重排重繪
頁面的重排重繪很耗性能,所以一定要盡可能減少頁面的重排重繪,例如頁面圖片大小變化、元素位置變化等這些情況都會導(dǎo)致重排重繪。
使用 CSS3 動畫,開啟GPU加速
使用 CSS3 動畫時設(shè)置 transform:translateZ(0) 來開啟移動設(shè)備瀏覽器的GPU圖形處理加速,讓動畫過程更加流暢,但在 Native WebView 下 GPU 加速有幾率產(chǎn)生 App Crash。
-webkit-transform:translateZ(0); -ms-transform:translateZ(0); -o-transform:translateZ(0); transform:translateZ(0);
合理使用 Canvas 和 requestAnimationFrame
選擇 Canvas 或 requestAnimationFrame 等更高效的動畫實現(xiàn)方式,盡量避免使用 setTimeout、setInterval 等方式來直接處理連續(xù)動畫。
SVG 代替圖片
可以考慮使用 SVG 代替圖片實現(xiàn)動畫,因為使用 SVG 格式內(nèi)容更小,而且 SVG DOM 結(jié)構(gòu)方便調(diào)整。
不濫用 float
在 DOM 渲染樹生成后的布局渲染階段,使用 float 的元素布局計算比較耗性能,所以盡量減少 float 的使用,推薦使用固定布局或 flex-box 彈性布局的方式來實現(xiàn)頁面元素布局。
不濫用 web 字體或過多 font-size 聲明
過多的 font-size 聲明會增加字體的大小計算,而且也沒有必要的。
架構(gòu)協(xié)議類
使用服務(wù)端渲染
服務(wù)端渲染的方式可以加快頁面內(nèi)容的渲染展示,避免空白頁面的出現(xiàn),同時可以解決移動端頁面SEO的問題。
使用 NativeView 代替 DOM 的性能劣勢
可以嘗試使用 NativeView 的 MNV* 開發(fā)模式來避免 HTML DOM 性能慢的問題,目前使用 MNV* 的開發(fā)模式已經(jīng)可以將頁面內(nèi)容渲染體驗做到接近客戶端 Native 應(yīng)用的體驗了。但需要避免 js Framework 和 native Framework 的頻繁交互。
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
8條關(guān)于Web前端性能的優(yōu)化建議(小結(jié))
一般網(wǎng)站優(yōu)化都是優(yōu)化后臺,如接口的響應(yīng)時間、SQL優(yōu)化、后臺代碼性能優(yōu)化、服務(wù)器優(yōu)化等,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2019-07-15