常見圖片格式
詳見:聊一聊幾種常用web圖片格式:gif浩嫌、jpg惋增、png燥滑、webp
圖片應用場景
普通展示圖片、圖標等
示例
代碼:https://github.com/js-fu/js-fu.github.io/tree/master/fe-img
1.html 普通靜態(tài)頁面
https://js-fu.github.io/fe-img/1.html
首先看到這是一個的普通靜態(tài)頁面筛璧,一個圖文列表。在Disable cache和Slow 3G的環(huán)境下打開該頁面妖滔,得到如下performance隧哮。
分析上圖,可看出
DOMContentLoaded
事件在2.37秒執(zhí)行座舍。load
事件要等到全部圖片資源都加載完沮翔,到了29.81秒才執(zhí)行。如果通過監(jiān)聽load
事件的話曲秉,要等很久才執(zhí)行采蚀,體驗比較差。而且靜態(tài)頁面內容是固定的承二,不靈活榆鼠。
DOMContentLoaded
和load
事件
DOMContentLoaded
: 當純 HTML 被完全加載以及解析時,DOMContentLoaded
事件會被觸發(fā)亥鸠,而不必等待樣式表妆够,圖片或者子框架完成加載。$(function() {})
load
: 當整個頁面及所有依賴資源如樣式表和圖片都已完成加載時负蚊,將觸發(fā)load
事件神妹。它與DOMContentLoaded
不同,后者只要頁面 DOM 加載完成就觸發(fā)家妆,無需等待依賴資源的加載鸵荠。
優(yōu)化
2.html 使用ajax獲取圖文列表數(shù)據(jù)
https://js-fu.github.io/fe-img/2.html
這個頁面的標題“圖文列表”,是固定的伤极。圖文資源模擬用ajax獲取蛹找。同樣在Disable cache和Slow 3G的環(huán)境下打開該頁面姨伤,得到如下performance。
分析上圖庸疾,可看出DOMContentLoaded
事件在2.38秒執(zhí)行乍楚,跟1.html差不多。load
事件提前到了2.39秒届慈,因為加載圖片資源是異步去加載的炊豪。但是仍有一個問題,不在可視范圍內的圖片也加載了拧篮,不必要词渤,可以等到頁面滾動,等圖片到了可視范圍內再去懶加載串绩。
3.html 懶加載
https://js-fu.github.io/fe-img/3.html
這個頁面缺虐,在 2.html 的基礎上增加了懶加載的功能。初始渲染頁面的時候礁凡,只下載在了出現(xiàn)在首屏的兩張圖片高氮。
原理:監(jiān)聽滾動事件、getBoundingClientRect
4.html 預加載
https://js-fu.github.io/fe-img/4.html
這個頁面顷牌,在 2.html 的基礎上增加了預加載的功能剪芍。首屏顯示loading蒙層和加載資源的進度條,等到加載完窟蓝,展示實際頁面罪裹,看圖文列表里的圖片都是預加載過的資源,瀏覽流暢很多运挫。
5.html 雪碧圖
https://js-fu.github.io/fe-img/5/5.html
對于一些小圖片状共,比如圖標等,可以采用雪碧圖的方案谁帕,講多個小圖片合成一個圖片峡继,減少網絡請求。
6.html iconfont
https://js-fu.github.io/fe-img/6.html
對于圖標等匈挖,也可以采用字體圖標iconfont代替圖片碾牌,圖標可以像字體一樣修改大小、顏色等樣式儡循。
7.html base64
https://js-fu.github.io/fe-img/7/7.html
對于一些尺寸非常小的圖片舶吗,可以使用base64的方案,將圖片的base64編碼寫入html贮折、css中裤翩∽手眩可以減少網絡請求调榄。
webpack配置中可以用url-loader
踊赠,設置一個界限值,小于界限值的時候每庆,會自動把小圖片轉成base64
8 骨架屏
9 檢測設備網絡狀況筐带,使用OSS服務,采用不同質量的圖片缤灵,是圖片大小和圖片質量達到一個平衡
阿里云OSS 伦籍,可以實現(xiàn)圖片質量變換、模糊腮出、旋轉帖鸦、裁剪等操作。
其它
cdn胚嘲、gzip等