H5移動前端性能優化

在移動端,因手機的配置和3/4G網絡的緣由,從兩個方面解決性能優化問題,1.加載不超過3秒,用loading或者資源不要超過1M。2.渲染速度。css

基於以上兩個方面,全部影響首屏加載和渲染的代碼應在處理邏輯中後置。html

加載優化:

1.Http請求:java

  減小Http請求,手機瀏覽器同時響應請求爲4個請求,因此,儘可能合併js和css,而且對圖片進行合併。web

2.緩存:正則表達式

  使用緩存能夠減小向服務器的請求數,節省加載時間,因此全部靜態資源都要在服務器端設置緩存,而且儘可能使用長Cache(長Cache資源的更新可以使用時間戳)算法

3.壓縮HTML、CSS、JavaScript:瀏覽器

  減小資源大小能夠加快網頁顯示速度,因此要對HTML、CSS、JavaScript等進行代碼壓縮,並在服務器端設置GZip。緩存

4.無阻塞:性能優化

  寫在HTML頭部的JavaScript(無異步),和寫在HTML標籤中的Style會阻塞頁面的渲染,所以CSS放在頁面頭部並使用Link方式引入,避免在HTML標籤中寫Style,JavaScript放在頁面尾部或使用異步方式加載。服務器

5.按需加載:

  將不影響首屏的資源和當前屏幕資源不用的資源放到用戶須要時才加載,能夠大大提高重要資源的顯示速度和下降整體流量。

  可是,要注意的是,按需加載會致使大量重繪,影響渲染性能,解決辦法是:

  (1)LazyLoad.js(關於LazyLoad.js請看博客)

  (2)滾屏加載

  (3)經過Media Query加載

6.預加載:

  大型重資源頁面(如遊戲)可以使用增長Loading的方法,資源加載完成後再顯示頁面。但Loading時間過長,會形成用戶流失。

  對用戶行爲分析,能夠在當前頁加載下一頁資源,提高速度。

  (1) 可感知Loading(如進入空間遊戲的Loading)

  (2) 不可感知的Loading(如提早加載下一頁)

7.壓縮圖片:

  圖片是最佔流量的資源,所以儘可能避免使用他,使用時選擇最合適的格式(實現需求的前提下,以大小判斷),合適的大小,而後使用智圖壓縮,同時在代碼中用Srcset來按需顯示。

  注意:過分壓縮圖片大小影響圖片顯示效果

  (1) 使用智圖( http://zhitu.tencent.com/ )

  (2) 使用其它方式代替圖片(1. 使用CSS3 2. 使用SVG 3. 使用IconFont)

  (3) 使用Srcset

  (4) 選擇合適的圖片(1. webP優於JPG 2. PNG8優於GIF)

  (5) 選擇合適的大小(1. 首次加載不大於1014KB 2. 不寬於640(基於手機屏幕通常寬度))

8.減小Cookie:

  Cookie會影響加載速度,因此靜態資源域名不使用Cookie。

9.避免重定向:

  重定向會影響加載速度,因此在服務器正確設置避免重定向。

10.異步加載第三方資源:

  第三方資源不可控會影響頁面的加載和顯示,所以要異步加載第三方資源。

腳本執行優化:

  腳本處理不當會阻塞頁面加載、渲染,所以在使用時需當注意:

  CSS寫在頭部,JavaScript寫在尾部或異步。

  避免圖片和iFrame等的空Src,空Src會從新加載當前頁面,影響速度和效率。

  儘可能避免重設圖片大小。

  重設圖片大小是指在頁面、CSS、JavaScript等中屢次重置圖片大小,屢次重設圖片大小會引起圖片的屢次重繪,影響性能。

  圖片儘可能避免使用DataURL,DataURL圖片沒有使用圖片的壓縮算法文件會變大,而且要解碼後再渲染,加載慢耗時長。

css優化:

儘可能避免寫在HTML標籤中寫Style屬性

1.避免CSS表達式:

  CSS表達式的執行需跳出CSS樹的渲染,所以請避免CSS表達式。

2.移除空的CSS規則:

  空的CSS規則增長了CSS文件的大小,且影響CSS樹的執行,因此需移除空的CSS規則。

3.正確使用Display的屬性:

  Display屬性會影響頁面的渲染,所以請合理使用。

  (1) display:inline後不該該再使用width、height、margin、padding以及float

  (2) display:inline-block後不該該再使用float

  (3) display:block後不該該再使用vertical-align

  (4) display:table-*後不該該再使用margin或者float

4.不濫用Float:

  Float在渲染時計算量比較大,儘可能減小使用。

5.不濫用Web字體:

  Web字體須要下載,解析,重繪當前頁面,儘可能減小使用。

6.不聲明過多的Font-size:

  過多的Font-size引起CSS樹的效率。

7.值爲0時不須要任何單位:

  爲了瀏覽器的兼容性和性能,值爲0時不要帶單位。

8.標準化各類瀏覽器前綴:

  (1) 無前綴應放在最後

  (2) CSS動畫只用 (-webkit- 無前綴)兩種便可

  (3) 其它前綴爲 -webkit- -moz- -ms- 無前綴 四種,(-o-Opera瀏覽器改用blink內核,因此淘汰)

9.避免讓選擇符看起來像正則表達式:

  高級選擇器執行耗時長且不易讀懂,避免使用。

javaScript執行優化:

1.減小重繪和迴流:

  (1) 避免沒必要要的Dom操做

  (2) 儘可能改變Class而不是Style,使用classList代替className

  (3) 避免使用document.write

  (4) 減小drawImage

2.緩存Dom選擇與計算:

  每次Dom選擇都要計算,緩存他。

3.緩存列表.length:

  每次.length都要計算,用一個變量保存這個值

4.儘可能使用事件代理,避免批量綁定事件:

  儘可能使用ID選擇器,ID選擇器是最快的。

5.TOUCH事件優化:

  使用touchstart、touchend代替click,因快影響速度快。但應注意Touch響應過快,易引起誤操做

渲染優化:

1.HTML使用Viewport

  Viewport能夠加速頁面的渲染,請使用如下代碼:

<meta name=」viewport」 content=」width=device-width, initial-scale=1″>

2.減小Dom節點:

  Dom節點太多影響頁面的渲染,應儘可能減小Dom節點

3.動畫優化:

  (1) 儘可能使用CSS3動畫

  (2) 合理使用requestAnimationFrame動畫代替setTimeout

  (3) 適當使用Canvas動畫 5個元素之內使用css動畫,5個以上使用Canvas動畫(iOS8可以使用webGL)

4.高頻事件優化:

  Touchmove、Scroll 事件可致使屢次渲染

  (1) 使用requestAnimationFrame監聽幀變化,使得在正確的時間進行渲染

  (2) 增長響應變化的時間間隔,減小重繪次數

5.GPU加速:

  CSS中如下屬性(CSS3 transitions、CSS3 3D transforms、Opacity、Canvas、WebGL、Video)來觸發GPU渲染,請合理使用。

  注意:過渡使用會引起手機過耗電增長。

本文轉自朋友http://www.cnblogs.com/xinxingyu/p/4753239.html

相關文章
相關標籤/搜索