首先要問一個問題,加載這一張圖片是否是達到了你追求的效果?好的設計每每是追求簡單,保持最好的性能。對於一個要加載不少資源的頁面來講,若是能去掉一個圖片資源,對性能的提高是很直觀的。固然,有的圖片賽過千言萬語,是否使用圖片仍是取決於你本身。web
而後你要考慮的是,現有的技術是否是能夠用更高效的方式知足你的要求。瀏覽器
若是你發現你的圖片內包含文本,請好好考慮下用戶體驗,不能搜索,不能選中,也不能放大,對於高分屏,更是難兼容。自定義字體能夠很好地幫你解決這類問題。服務器
若是圖片確實是必須的,你要好好考慮用何種格式的圖片。app
左圖是矢量圖,右圖是光柵圖。ide
每種格式的圖片都有其特色。矢量圖通常用於簡單的幾何圖形,如logo、文本和圖標,優點是高清、縮放無損、體積小。svg
當圖片的形狀趨於複雜,如照片,你用大量的svg標籤堆砌出來,看上去也不真實,矢量圖的侷限性就在這。這時能夠考慮一下光柵圖,如png、jpg或者webp。性能
光柵圖的缺點也很明顯:縮放模糊、體積過大、針對不一樣分辨率須要提供不一樣的尺寸。字體
像素點分爲兩類:CSS像素和設備像素。一個CSS像素通常對應一個設備像素,也可能對應多個像素。設備像素越多,看上去更細膩,給用戶的感受是不同的。優化
高DPI屏幕雖然展現的更好,但卻須要提供的圖片尺寸也更大。在這點上,矢量圖佔優,但矢量圖的製做成本也相對較高。動畫
因爲光柵圖是基於像素的,也意味着圖片尺寸越大,文件大小越大,以下表:
屏幕分辨率 | 像素點個數 | 未壓縮的文件大小 |
---|---|---|
1x | 100 * 100 = 10000 | 40000 |
2x | 100 100 4 = 40000 | 160000 |
3x | 100 100 9 = 90000 | 360000 |
這不是直線增加,而是平方的增加。
有如下兩種方式能夠優化:
格式 | 透明度 | 動畫 | 瀏覽器支持 |
---|---|---|---|
PNG | 是 | 否 | 全部 |
JPEG | 否 | 否 | 全部 |
WebP | 是 | 是 | 全部現代瀏覽器 |
png和jpeg是兩個比較傳統的圖片格式,應用普遍,現代瀏覽器有一種新的格式webp,擁有更高的壓縮比,提供了更豐富的支持。
後續會單獨一篇文章來說述webp的實際應用。
在使用老的圖片格式的時候,有如下幾點要考慮:
是否須要動畫?用 video
標籤替。
gif
?gif
只有最高256位色,實現一樣的動畫,比video要大得多。是否想在高分屏上保留細節?使用 png
。
png
不支持任何有損壓縮,能保持最高質量,但一樣的體積會更大,視狀況而用。svg
。若是你展現的是照片、截圖或者相似的圖片?使用 jpeg
。
jpeg
能夠組合使用有損和無損壓縮來減小文件大小,能夠嘗試不一樣的質量壓縮來選擇一個最小又最合適的。若是你是在webview中使用圖片,儘量的選擇webp。Facebook以及其餘大廠在app和服務器之間的圖片傳輸上,都會選擇webp,能夠節省很大一筆開銷,存儲成本和帶寬成本。