文章引用地址:http://www.iefans.net/liulanqi-waibu-ziyuan-jiazai/ 做者:iefansjavascript
這個總結來源於一次優化的請求,最初某個頁面的加載十分緩慢,load事件遲遲沒法觸發,所以但願能夠經過對靜態文件分域名等方式對頁面的外部資源進行優化,拿得load事件儘量早地觸發。css
因而我查看了頁面的源碼,並對外部資源進行了整理,基於下面2個理念畫出了一個推測的瀑布圖:java
一、瀏覽器對同一個域只能併發2個HTTP請求 – 網上盛傳已久。
二、javascript文件的加載會阻塞瀏覽器其餘資源的加載 – 一樣網上盛傳已久。
web
然而,當我看到各瀏覽器中實際的瀑布圖時,我知道本身又犯了一個簡單的錯誤:太過相信所謂的權威和大衆的聲音,而沒有更早地進行實踐來檢驗理論的正確性……算法
本篇文章就使用幾種流行的瀏覽器,針對同一個頁面的外部資源加載過程進行分析,推測各瀏覽器加載外部資源的策略、特徵,並最後給予必定的比較和總結。chrome
測試的頁面結構以下:瀏覽器
共12個外部資源,加上頁面自己,一次完整的加載一共有13次HTTP GET請求。服務器
針對每個外部資源,服務器首先會休眠5秒的時間,隨後再返回相應的內容,以方便查看整個外部資源的加載過程。併發
測試的瀏覽器以下:工具
IE6的瀑布圖很是傳統,其特徵有:
可見網上盛傳的2個「誤區」都來自IE6統治瀏覽器市場的時代,針對IE6的優化太多太多,你們也就習慣性地將這些結論做爲公理來使用了。
和IE6徹底不一樣的瀑布圖,其特色有:
和IE8的幾乎徹底同樣:
不知是由於設計理念上的不一樣,仍是由於beta版未照顧到這一塊,Firefox4反而退化了,和Firefox3.6的區別主要體如今對資源類型的處理上,Firefox4再也不嚴格地優先下載script和link標籤訂義的外部資源,而是按照HTML結構中出現的順序來進行加載。
Chrome自帶的工具不能很清楚地表示各請求的開始時間,因此使用了Fiddler的瀑布圖,從圖上能夠看出,Chrome也是比較特立獨行的一位,其特色有:
先報怨一下,Dragonfly不怎麼好用來着……Opera的資源加載也比較有特點,並且很難看出規律,只能大體總結一下:
opera:config - Performance - Max Connections Server
查看和修改。對各瀏覽器加載外部資源的策略的掌握,是WPO的基本元素,雖然一直想當一個WPO的專家,卻在這方面遲遲不肯實踐,實在有愧於本身的理想……
最後,若是有哪位朋友瞭解Opera對資源加載的具體策略的,還請提供一下,以便有更清晰地認知,謝謝~!