2

我有很多小圖像(大小約3kb左右)以及大量的css和js文件。在瀏覽器緩存第一個請求之後,當我重新加載頁面時,瀏覽器嘗試檢查緩存內容的新鮮度(通過設置If-Modified-Since等)並獲取304未修改的響應。每個驗證請求都會嚴重增加頁面加載時間(比如20次300ms)。保持資產在瀏覽器中新鮮,取消緩存的新鮮度檢查請求[適用於heroku上的rails 3.1應用程序]

如何從瀏覽器中取消與服務器的緩存新鮮度檢查?如何指示瀏覽器在一段時間內(例如1小時)使用本地緩存文件/圖像,而無需在每個重新加載的情況下重新驗證​​或檢查本地緩存與遠程服務器的新鮮度?

樣品小圖像取下面[使用軌道3.1,在Heroku]報頭的信息:

響應頭

HTTP/1.1 304 Not Modified 
    Server: nginx/0.7.67 
    Date: Thu, 10 Nov 2011 17:53:33 GMT 
    Connection: keep-alive 
    Via: 1.1 varnish 
    X-Varnish: 1968827848 
    Last-Modified: Tue, 08 Nov 2011 07:36:04 GMT 
    Cache-Control: public, max-age=31536000 
    Etag: "5bda917d22f8a144c293f3f19723dbc6" 

請求頭

GET /assets/icons/flash_close_button-5bda917d22f8a144c293f3f19723dbc6.png HTTP/1.1 
    Host: ???.heroku.com 
    User-Agent: Mozilla/5.0 (X11; Linux i686; rv:6.0.1) Gecko/20100101 Firefox/6.0.1 
    Accept: image/png,image/*;q=0.8,*/*;q=0.5 
    Accept-Language: en-us,en;q=0.5 
    Accept-Encoding: gzip, deflate 
    Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7 
    Connection: keep-alive 
    Referer: http://???.heroku.com/ 
    Cookie: ??? 
    If-Modified-Since: Tue, 08 Nov 2011 07:36:04 GMT 
    If-None-Match: "5bda917d22f8a144c293f3f19723dbc6" 
    Cache-Control: max-age=0 

回答

2

這條線:

Cache-Control: public, max-age=31536000 

告訴瀏覽器長時間不要求更新,並將這些文件存儲在可公開訪問的緩存中(其中聽到的意思是公開給本地機器 - 而不是公衆)。因此,您的瀏覽器不應該重新檢查這些文件。您是否嘗試過使用其他瀏覽器來驗證此行爲是否存在

儘管如此,考慮到您的文件來自varnish緩存而不是您的dyno,並且正在以HTTP 304形式返回,但對於20個文件,300ms聽起來像是很長時間的。但是,這應該幾乎不會被用戶感知。

相關問題