DIV CSS 佈局教程網

 DIV+CSS佈局教程網 >> 網頁腳本 >> WEB網站前端 >> 前端技巧 >> 實測圖片的HTTP請求
實測圖片的HTTP請求
編輯:前端技巧     

請在主流浏覽器中打開測試頁面,在Fiddler裡查看http請求。

1. 隱藏圖片
<img src="1.jpg" style="display: none" />測試:test_1.html
結論:只有Opera不產生請求。
注意:用visibility: hidden隱藏圖片時,在Opera下也會產生請求。

2. 重復圖片
<img src="1.jpg" /><img src="1.jpg" />測試:test_2.html
結論:所有浏覽器都只產生一次請求 。

3. 重復背景
<style type="text/css">    .test1 { background: url(1.jpg) }    .test2 { background: url(1.jpg) }</style><div class="test1">test1</div><div class="test2">test2</div>測試:test_3.html
結論:所有浏覽器都只產生一次請求。

4. 不存在的元素的背景
<style type="text/css">    .test1 { background: url(1.jpg) }    .test2 { background: url(2.jpg) } /* 頁面中沒有class為test2的元素 */</style><div class="test1">test1</div>測試:test_4.html
結論:背景僅在應用的元素在頁面中存在時,才會產生請求。這對CSS框架來說,很有意義。

5. 隱藏元素的背景
<style type="text/css">    .test1 { background: url(1.jpg); display: none; }    .test2 { background: url(2.jpg); visibility: hidden; }</style><div class="test1">test1</div>測試:test_5.html
結論:Opera和Firefox對於用display: none隱藏的元素背景,不會產生HTTP請求。僅當這些元素非display: none時,才會請求背景圖片。

6. 多重背景
<style type="text/css">    .test1 { background: url(1.jpg); }    .test1 { background: url(2.jpg); }</style><div class="test1">test1</div>測試:test_6.html
結論:除了基於webkit渲染引擎的Safari和Chrome,其它浏覽器只會請求一張背景圖。
注意:webkit引擎浏覽器對背景圖都請求,是因為支持CSS3中的多背景圖。

7. hover的背景加載
<style type="text/css">    a.test1 { background: url(1.jpg); }    a.test1:hover { background: url(2.jpg); }</style><a href="#" class="test1">test1</a>測試:test_7.html
結論:觸發hover時,才會請求hover狀態下的背景。這會造成閃爍,因此經常放在同一張背景圖裡通過翻轉來實現。
注意:在圖片no-cache的情況下,IE每次hover狀態改變時,都會產生一次新請求。很糟糕。
2009-05-13晚補充:上面的解釋有誤,更詳細的解釋請參考續篇。翻轉技巧指的是Sprite技術,例子:test_7b.html, 在ie6下不會產生閃爍。

8. JS裡innerHTML中的圖片
<script type="text/javascript">    var el = document.createElement('div');    el.innerHTML = '<img src="1.jpg" />';    //document.body.appendChild(el);</script>測試:test_8.html
結論:只有Opera不會馬上請求圖片。
注意:當添加到DOM樹上時,Opera才會發送請求。

9. 圖片預加載
最常用的是JS方案:

復制代碼代碼如下:
<script type="text/javascript"> new Image().src = '1.jpg'; new Image().src = '2.jpg';</script>在無JS支持的環境下,可以采用隱藏元素來預加載:
<img src="1.jpg" style="visibility: hidden; height: 0; width: 0" />測試:test_9.html

終於到總結了

1.對於隱藏圖片和隱藏元素的背景,Opera不會產生請求。
2.對於隱藏元素的背景,Firefox也不會產生請求。
3.對於尚未插入DOM樹的img元素,Opera不會產生請求。
4.基於webkit引擎的Safari和Chrome,支持多背景圖。
5.其它情景,所有主流浏覽器保持一致。
對圖片請求的處理上,個人覺得Opera走在前列。

番外

1. 用Fiddler監控Opera時,如果是本地服務器,需要在Opera的代理服務器設置裡,將本地服務器勾選上。

2. 查看HTTP請求數,還有一個萬無一失的方法是,直接查看Apache的access.log文件。

3. 我的Firefox對於重復圖片和重復背景,會產生重復請求。禁用了所有擴展,問題依舊。有知詳情者,還望告知。

XML學習教程| jQuery入門知識| AJAX入門| Dreamweaver教程| Fireworks入門知識| SEO技巧| SEO優化集錦|
Copyright © DIV+CSS佈局教程網 All Rights Reserved