翻譯 效能探索(2) 瀏覽器快取的使用情況

2021-09-06 02:07:13 字數 1939 閱讀 1782

在前一篇文章中,我講述了關於減少http請求,80-20法則告訴我們什麼,瀏覽器花費了80%的時間去獲取包括指令碼、樣式和在內的一些元件,減少http請求的次數對於減少響應時間有著最大的影響,但是不應該所有的東西都儲存在快取中吧?

區分空快取的使用者體驗和全快取的使用者體驗是很重要的。「空快取」意味著瀏覽器繞過本地快取而請求所有元件。「全快取」意思是頁面所有(至少大部分)元件已經在快取中了,沒有必要再傳送http請求去獲取了(相應的http請求避免了)。

合併指令碼,樣式,等一些策略將會減少http請求的次數(對空快取和全快取都有用),在一些元件的標頭檔案中設定過期時間也會減少http請求的次數(這個只對全快取狀態起作用)。

圖1 在空快取的狀態下開啟雅虎主頁

圖2 在全快取的狀態下開啟雅虎主頁

圖3顯示了乙個關於當訪問http://www/yahoo.com時請求每個元件的大小和數量的彙總,使用者將從全快取中得到多少好處?在我家裡面訪問http://www/yahoo.com,空快取狀態下需要2.4秒,而全快取狀態下只需要0.9秒,全快取比空快取減少了90%的http請求、83%的資料流量。

圖3雅虎的效能團隊做了乙個關於有多少比例的使用者和頁面在空調快取狀態下訪問雅虎頁面的實驗。我們實驗是通過分析使用者對於乙個元件(乙個新的)的快取情況來展開的。對於這個新的我們做了以下的統計:

有多少比例的使用者在訪問這個?

有多少比例的頁面在訪問這個?

expires(過期時間): thu, 15 apr 2004 20:00:00 gmt

last-modified(上次修改時間): wed, 28 sep 2006 23:49:57 gmt

當瀏覽器儲存乙個頁面元件的時間,同時也儲存了這個元件的過期時間和上次修改時間(http頭)。設定過期時間會強迫瀏覽器在訪問頁面的時候去請求,如果已經在快取中,並且正在被重新請求,瀏覽器會把最後修改時間加入在http頭中,這就是傳統的get請求,如果沒有被修改,伺服器會返回乙個304**,所以對於瀏覽器的請求伺服器會返回下面的兩種**:

200--瀏覽器沒有快取。

304--瀏覽器已經快取了,但是需要驗證最後修改時間

因為瀏覽器請求的返回狀態是可以被記錄的,所以我們是可以通過分析日誌來檢測空快取和全快取。

圖4顯示了使用者和頁面在空快取的狀態的下訪問所佔的比例,在實驗的第一天,沒有使用者有這個的快取,所以空快取佔據100%,隨著時間的推移,更多的使用者擁有了這個的快取,所以空快取的比例開始下降一直到乙個平穩的狀態。

圖440%--60%的yahoo!使用者是空快取的,20%的頁面訪問是在空快取的情況下進行,據我所知,目前還沒有其他的研究來說明這個事情,我不知道你是怎麼認為的,但是我們的實驗結果給了我乙個大的驚奇。儘管你最大限度的使用了快取,但是還是有很大數量的使用者是在空快取狀態下的,這個又回到前一篇文章的話題「減少http請求對於減少響應時間有最大的影響」,對於不同的網頁,沒有快取的使用者的比例是不同的,尤其對於那些有著大量活躍使用者的頁面。在我的學習中發現,不管如何使用快取,至少有20%的時間頁面是空快取的狀態下被訪問的。

結論:始終要考慮空快取的使用者體驗,空快取要比你想象的普遍很多。

performance research, part 2: browser cache usage – exposed!

瀏覽器的快取

瀏覽器快取主要是指http請求的快取,作用是不言而喻的,能夠減少資源請求,極大的改善網頁效能,提高使用者體驗。瀏覽器第一次獲取到資源後,然後根據返回的資訊來告訴如何快取資源,可能採用的是強快取,也可能告訴客戶端瀏覽器是協商快取,這都需要根據響應的header內容來決定的。審查network裡面的資源...

瀏覽器的快取

1 先根據這個資源的http header判斷它是否命中強快取,如果命中,則直接從本地快取中獲取資源,不會則向伺服器請求 資源。2 當強快取沒有命中時,客戶端會傳送請求到伺服器,伺服器通過另一些request header驗證這個資源是否命中協商快取,這個過程成為http再驗證,如果命中,伺服器直接...

php 瀏覽器 快取,深入PHP與瀏覽器快取的分析

我們往往在伺服器上對快取設定進行各種優化方案,但是我們卻很少注意到客戶端快取,準確的說是瀏覽器的快取機制。其實每種瀏覽器都有快取策略,會暫時將每乙個瀏覽過的檔案快取在乙個特殊的資料夾裡。我們就可以在使用者重複提交頁面請求的時候,告訴使用者這個頁 面沒有改變,可以呼叫快取。那我們怎麼知道使用者有沒有這...