繼上一篇《靈活運用JS開發技巧》獲得好評後,發現總結性的小乾貨能夠爲你們提高更好的開發技巧和編碼思惟,對代碼量產化提供更紮實的質量和支持。此次咱們來聊聊你們可能都比較關心的話題:性能優化。css
一說到頁面的性能優化,你們可能都會想起雅虎軍規
、2-5-8原則
、3秒鐘首屏指標
等規則,這些規則在開發過程當中不是強制要求的,可是有時候爲了追求頁面性能的完美和體驗,就不得不對原有的代碼進行修改和優化。html
下面就結合本身三年多的開發經驗和大量的項目實踐,整理出一些經常使用的性能優化要點,同時再羅列一下雅虎軍規
、2-5-8原則
、3秒鐘首屏指標
這三個經常使用規則的要點。前端
爲了方便記憶和閱讀,文章使用部分簡寫名詞,解釋以下git
Desktop End Page
Mobile End Page
首屏指標
Loading
進行佔位338kb/s(2.71mb/s)
,首屏資源不該超過1014kb
加載優化github
Android
支持4個,iOS5+
支持6個)
GZip
link
方式引入,腳本放在尾部並使用異步方式加載Loading
,資源加載完成後再顯示頁面,但加載時間過長,會形成用戶流失
Loading
srcset
來按需顯示(過分壓縮圖像大小影響圖像顯示效果)
Cookie
會影響加載速度,靜態資源域名不使用Cookie
加載過程是最爲耗時的過程,可能會佔到總耗時的`80%時間(**優化重點**) web
執行優化正則表達式
src
會從新加載當前頁面,影響速度和效率DataURL
圖像沒有使用圖像的壓縮算法,文件會變大,而且要解碼後再渲染,加載慢耗時長執行處理不當會阻塞頁面加載和渲染 算法
渲染優化canvas
設置viewport:HTML的viewport
可加速頁面的渲染segmentfault
<meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1, minimum-scale=1, maximum-scale=1">
複製代碼
減小DOM節點:DOM節點太多影響頁面的渲染,儘可能減小DOM節點
優化動畫
CSS動畫
,5個元素以上使用Canvas動畫
,iOS8+
可以使用WebGL動畫
優化高頻事件:scroll
、touchmove
等事件可致使屢次渲染
GPU加速:使用某些HTML5標籤和CSS3屬性會觸發GPU渲染
,請合理使用(過渡使用會引起手機耗電量增長)
video
、canvas
、webgl
opacity
、transform
、transition
樣式優化
display
會影響頁面的渲染
display:inline
後不該該再使用float
、margin
、padding
、width
和height
display:inline-block
後不該該再使用float
display:block
後不該該再使用vertical-align
display:table-*
後不該該再使用float
和margin
float
在渲染時計算量比較大,儘可能減小使用font-size
影響CSS樹的效率0
時不要帶單位Opera
改用blink
內核,-o-
已淘汰腳本優化
.length
計算用一個變量保存值id
選擇器選擇元素是最快的tap
(touchstart
和touchend
)代替click
(注意touch
響應過快,易引起誤操做)雅虎軍規
雅虎團隊經過大量實踐總結出如下7類35條
前端優化規則,規則詳情請參考這位兄弟的《雅虎前端優化35條規則翻譯》。
HTTP
請求數DNS
查詢AJAX請求
DOM
元素數量iframe
數量404
錯誤CSS
表達式<link>
代替@import
JS
和CSS
JS
和CSS
DOM
操做CSS精靈圖
HTML
中縮放圖片favicon
Cookie
大小Cookie
域名的資源25kb
CDN
Expires
或Cache-Control
Gzip
資源ETags
AJAX請求
時使用get
2-5-8原則
在前端開發中,此規則做爲一種開發指導思路,針對瀏覽器頁面的性能優化。
2秒內
獲得響應,會感受頁面的響應速度很快 Fast2~5秒間
獲得響應,會感受頁面的響應速度還行 Medium5~8秒間
獲得響應,會感受頁面的響應速度很慢,但還能夠接受 Slow8秒後
仍然沒法獲得響應,會感受頁面的響應速度垃圾死了(此時會有如下四種可能)
刷新頁面
離開頁面,有可能轉投競爭對手的網站
咒罵開發此頁面的程序猿
網線斷了?Wi-Fi斷了?信號很差?話費用完了?
知道這個規則的數字順序怎樣來的嗎,看下鍵盤右方的數字鍵盤由下往上排序:2-5-8
3秒鐘首屏指標
此規則適用於M端,顧名思義就是打開頁面後3秒鐘內完成渲染並展現內容。
寫到最後總結得差很少了,後續若是我想起還有哪些前端性能優化遺漏的,會繼續在這篇文章上補全,同時也但願各位朋友對文章裏的要點進行補充或者提出本身的看法。歡迎在下方進行評論或補充喔,喜歡的點個贊或收個藏,保證你在開發時用得上。
原文:請戳這裏
做者:JowayYoung
倉庫:Github
博客:掘金、思否、知乎
公衆號:Uzero
聯繫我:關注公衆號後有個人微信喲
《靈活運用》系列
《依賴彙總》系列
《必備工具》系列
《隨筆》系列
關注公衆號Uzero
,更多前端小乾貨等着你喔!我是JowayYoung
,喜歡分享前端技術和生活紀事,學習與生活不落下,天天進步一點點,與你們相伴成長