原文連接:http://caibaojian.com/mobile-performance.html#t2javascript
加載過程是最爲耗時的過程,可能會佔到總耗時的80%時間,所以是優化的重點·css
· 減小HTTP請求
由於手機瀏覽器同時響應請求爲4個請求(Android支持4個,ios 5後可支持6個),因此要儘可能減小頁面的請求數,首次加載同時請求數不能超過4個
a) 合併CSS、JavaScript
b) 合併小圖片,使用雪碧圖html
· 緩存
使用緩存能夠減小向服務器的請求數,節省加載時間,因此全部靜態資源都要在服務器端設置緩存,而且儘可能使用長Cache(長Cache資源的更新可以使用時間戳)
a) 緩存一切可緩存的資源
b) 使用長Cache(使用時間戳更新Cache)
c) 使用外聯式引用CSS、JavaScript前端
· 壓縮HTML、CSS、JavaScript
減小資源大小能夠加快網頁顯示速度,因此要對HTML、CSS、JavaScript等進行代碼壓縮,並在服務器端設置GZip
a) 壓縮(例如,多餘的空格、換行符和縮進)
b) 啓用GZipjava
· 無阻塞
寫在HTML頭部的JavaScript(無異步),和寫在HTML標籤中的Style會阻塞頁面的渲染,所以CSS放在頁面頭部並使用Link方式引入,避免在HTML標籤中寫Style,JavaScript放在頁面尾android
部或使用異步方式加載ios
· 使用首屏加載
首屏的快速顯示,能夠大大提高用戶對頁面速度的感知,所以應儘可能針對首屏的快速顯示作優化css3
· 按需加載
將不影響首屏的資源和當前屏幕資源不用的資源放到用戶須要時才加載,能夠大大提高重要資源的顯示速度和下降整體流量
PS:按需加載會致使大量重繪,影響渲染性能
a) LazyLoad
b) 滾屏加載
c) 經過Media Query加載web
· 預加載
大型重資源頁面(如遊戲)可以使用增長Loading的方法,資源加載完成後再顯示頁面。但Loading時間過長,會形成用戶流失
對用戶行爲分析,能夠在當前頁加載下一頁資源,提高速度
a) 可感知Loading(如進入空間遊戲的Loading)
b) 不可感知的Loading(如提早加載下一頁)正則表達式
· 壓縮圖片
圖片是最佔流量的資源,所以儘可能避免使用他,使用時選擇最合適的格式(實現需求的前提下,以大小判斷),合適的大小,而後使用智圖壓縮,同時在代碼中用Srcset來按需顯示
PS:過分壓縮圖片大小影響圖片顯示效果
a) 使用智圖( http://zhitu.tencent.com/ )
b) 使用其它方式代替圖片(1. 使用css3 2. 使用SVG 3. 使用IconFont)
c) 使用Srcset
d) 選擇合適的圖片(1. webP優於JPG 2. PNG8優於GIF)
e) 選擇合適的大小(1. 首次加載不大於1014KB 2. 不寬於640(基於手機屏幕通常寬度))
· 減小Cookie
Cookie會影響加載速度,因此靜態資源域名不使用Cookie
· 避免重定向
重定向會影響加載速度,因此在服務器正確設置避免重定向
· 異步加載第三方資源
第三方資源不可控會影響頁面的加載和顯示,所以要異步加載第三方資源
腳本處理不當會阻塞頁面加載、渲染,所以在使用時需當注意
· CSS寫在頭部,JavaScript寫在尾部或異步
· 避免圖片和iframe等的空Src
空Src會從新加載當前頁面,影響速度和效率
· 儘可能避免重設圖片大小
重設圖片大小是指在頁面、CSS、JavaScript等中屢次重置圖片大小,屢次重設圖片大小會引起圖片的屢次重繪,影響性能
· 圖片儘可能避免使用DataURL
DataURL圖片沒有使用圖片的壓縮算法文件會變大,而且要解碼後再渲染,加載慢耗時長
· 儘可能避免寫在HTML標籤中寫Style屬性
· 避免CSS表達式
CSS表達式的執行需跳出CSS樹的渲染,所以請避免CSS表達式
· 移除空的CSS規則
空的CSS規則增長了CSS文件的大小,且影響CSS樹的執行,因此需移除空的CSS規則
· 正確使用Display的屬性
Display屬性會影響頁面的渲染,所以請合理使用
a) display:inline後不該該再使用width、height、margin、padding以及float
b) display:inline-block後不該該再使用float
c) display:block後不該該再使用vertical-align
d) display:table-*後不該該再使用margin或者float
· 不濫用Float
Float在渲染時計算量比較大,儘可能減小使用
· 不濫用web字體
Web字體須要下載,解析,重繪當前頁面,儘可能減小使用
· 不聲明過多的Font-size
過多的Font-size引起CSS樹的效率
· 值爲0時不須要任何單位
爲了瀏覽器的兼容性和性能,值爲0時不要帶單位
· 標準化各類瀏覽器前綴
a) 無前綴應放在最後
b) CSS動畫只用 (-webkit- 無前綴)兩種便可
c) 其它前綴爲 -webkit- -moz- -ms- 無前綴 四種,(-o-Opera瀏覽器改用blink內核,因此淘汰)
· 避免讓選擇符看起來像正則表達式
高級選擇器執行耗時長且不易讀懂,避免使用
· 減小重繪和迴流
a) 避免沒必要要的Dom操做
b) 儘可能改變Class而不是Style,使用classList代替className
c) 避免使用document.write
d) 減小drawImage
· 緩存Dom選擇與計算
每次Dom選擇都要計算,緩存他
· 緩存列表.length
每次.length都要計算,用一個變量保存這個值
· 儘可能使用事件代理,避免批量綁定事件
· 儘可能使用ID選擇器
ID選擇器是最快的
· TOUCH事件優化
使用touchstart、touchend代替click,因快影響速度快。但應注意Touch響應過快,易引起誤操做
· HTML使用Viewport
Viewport能夠加速頁面的渲染,請使用如下代碼
<meta name=」viewport」 content=」width=device-width, initial-scale=1″>
· 減小Dom節點
Dom節點太多影響頁面的渲染,應儘可能減小Dom節點
· 動畫優化
a) 儘可能使用CSS3動畫
b) 合理使用requestAnimationFrame動畫代替setTimeout
c) 適當使用Canvas動畫 5個元素之內使用css動畫,5個以上使用Canvas動畫(iOS8可以使用webGL)
· 高頻事件優化
Touchmove、Scroll 事件可致使屢次渲染
a) 使用requestAnimationFrame監聽幀變化,使得在正確的時間進行渲染
b) 增長響應變化的時間間隔,減小重繪次數
· GPU加速
CSS中如下屬性(CSS3 transitions、CSS3 3D transforms、Opacity、Canvas、WebGL、Video)來觸發GPU渲染,請合理使用
PS:過渡使用會引起手機過耗電增長
來源:前端開發博客