可能是某篇微博的關(guān)系,今天有人來評論說,使用雪碧圖,內(nèi)存會暴漲的。。。這個問題討論的也蠻多了,那,到底,使用雪碧圖后,會占用很多內(nèi)存嗎?
實驗:下午做了個簡單的實驗,用99個128px*128px的png 32圖片,寫了三個頁面來做測試:
只用img標(biāo)簽調(diào)用; 用css分別調(diào)用每個png圖片做背景; 使用雪碧圖做背景然后分別用Chrome、IE6/7/8/9、Firefox做測試,具體的數(shù)據(jù)我這里就不詳細(xì)列了,感興趣的話可以自測一下。
結(jié)論:在各瀏覽器下,三個頁面占用的內(nèi)存相當(dāng),只有很小的差異,Chrome下,雪碧圖占用內(nèi)存略少一點點兒,IE下略多一點點兒。。。
包括mouseover等交互事件,對瀏覽器內(nèi)存也沒什么影響,只是會影響CPU占用率——這個即便純色背景色都會在事件觸發(fā)時提高CPU占用率的。。。
所以,雪碧圖的真正問題是利用率的問題,如大貓所說,如果你雪碧圖中合并了10個icon,結(jié)果實際只使用了3個,那才是浪費了內(nèi)存。
其實,圖片在瀏覽器中占用的內(nèi)存是可以計算的:透明的圖片,內(nèi)存占用是長*寬*4,不透明圖片占用是長*寬*3,比如第三個例子中的雪碧圖大小是12770*128,它在瀏覽器中占用內(nèi)存是12770*128*4=6.23MB左右。
總結(jié): 雪碧圖的尺寸要優(yōu)化好,空白盡可能少; 及時清理不再使用的圖片; 將雪碧圖權(quán)重做分離,全局/框架級的和局部/模塊級的分離開; 緩存設(shè)定和更新頻率匹配,如果將每天更新的雪碧圖的緩存設(shè)置到一個月很容易出問題的。新聞熱點
疑難解答