近期研究着前端性能的優化方面的知識,並以博客記之。以前有相同系列的文章(前端性能優化--圖片懶加載(lazyload image)),此次繼續是關於圖片的處理,css sprites 和 base64 格式圖片,這兩種處理都是經過減小了http的請求來達到前端性能優化的效果,請求減小,與服務器鏈接次數減小,加載頁面的時間就快了,如是甚好。css
Css Sprites(雪碧圖或css精靈),是網頁圖片處理的一種方式,它容許你將一個頁面涉及到的全部零星圖片都包含到一張大圖中去,這樣一來,當訪問該頁面時,載入的圖片就不會像之前那樣一幅一幅地慢慢顯示出來了。html
將許多的小圖片整合到一張大圖片中,利用css中的background-image屬性,background-position屬性定位某個圖片位置,來達到在大圖片中引用某個部位的小圖片的效果。前端
html代碼:webpack
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>css Sprites</title> </head> <body> <ul class="container"> <li class="icon icon-issue"></li> <li class="icon icon-upload"></li> <li class="icon icon-passage"></li> </ul> </body> </html>
css代碼:web
.container { overflow: hidden; width: 50px; height: 200px; background-color: #faa755; } .icon { margin: 0 auto; margin-top: 20px; width: 40px; height: 30px; background-image: url(icon.png); list-style-type: none; } .icon-issue { background-position: 0 0; } .icon-upload { background-position: 0 -50px; } .icon-passage { background-position: 0 -100px; }
base64是網絡上最多見的用於傳輸8Bit字節代碼的編碼方式之一,要求把每三個8Bit的字節轉換爲四個6Bit的字節,Base64是網絡上最多見的用於傳輸8Bit字節代碼的編碼方式之一。跨域
通俗點講:將資源本來二進制形式轉成以64個字符基本單位,所組成的一串字符串。
好比一張圖片轉成base64編碼後就像這樣,圖片直接以base64形式嵌入文件中(很長沒截完):
瀏覽器
圖片生成base64能夠用一些工具,如在線工具,但在項目中這樣一個圖片這樣生成是挺繁瑣。
特別說下,webpack中的url-loader能夠完成這個工做,能夠對限制大小的圖片進行base64的轉換,很是方便。性能優化
上面說的兩個處理圖片共同點是都是應用於小圖片,都能減小請求數,但並非全部的圖片都適用,尺寸大的圖片就不該使用。
兩種方式都有利有弊,應該適應場景使用,權衡利弊,方可將這兩種方法能力發揮好。服務器