2011-05-01 61 views
46

我很難找到一個明確,實際的解釋是什麼是利用瀏覽器緩存來提高頁面速度的正確方法。槓桿瀏覽器緩存 - 過期或最大年齡,最後修改或etag

根據this site

指定的一個很重要的過期或緩存控制最大年齡, 和Last-Modified或ETag之一,所有可緩存資源。指定Expires和Cache-Control:max-age是 冗餘,或者指定 指定Last-Modified和ETag。

這是正確的嗎?如果是這樣,我應該使用Expiresmax-age?我想我對這兩者都有一個大致的瞭解,但不知道通常最好使用哪一種。

如果我還必須做Last-ModifiedETag,其中哪一個?我想我得到Last-Modified,但在這個ETag概念上我仍然很模糊。

此外,我應該啓用瀏覽器緩存的文件?

回答

63

這是正確的嗎?

是的,過期和最大年齡做同樣的事情,但以兩種不同的方式。與Last-Modified和Etag相同的東西

如果是這樣,我應該怎麼做 expires或max-age?

過期依賴於用戶時鐘的準確性,所以它通常是一個糟糕的選擇(因爲大多數瀏覽器支持HTTP/1.1)。使用max-age,告訴瀏覽器該文件在很多秒鐘內都有效。例如,1天的緩存將是:

緩存控制:最大年齡= 86400

注意,當兩個Cache-ControlExpires存在,Cache-Control優先。 read

如果我還必須做Last-Modified或ETag,那是哪一個?我想我得到最後修改

你是對的,Last-Modified應該更好。雖然是時候了,但它是由服務器發送的。因此用戶的時鐘沒有問題。瀏覽器發送的最後修改服務器發送的最後一次請求的文件,如果是相同的,服務器answsers空響應«304未修改»

另外,哪些文件,我應該使瀏覽器緩存?

所有文件都有益於緩存。你有兩種不同的方法:

  • max-age:適用於永不改變的文件(圖像,CSS,javascript)。只要最大年齡值,瀏覽器就不會向服務器發送任何請求。所以你會看到第二次加載時頁面加載非常快。如果您需要更新文件,只需添加一個問號,更改日期(例如/image.png?20110602,或者更好的代理中的緩存,像/20110602/image.png或/image.20110602.png) 。這樣,如果文件緊急,可以使文件過期(請記住,瀏覽器在有最大文件時幾乎不會訪問服務器)。主要用途是加快速度並限制發送到服務器的請求。
  • 憑藉最後修改:可以在所有文件中設置(包括那些具有最大年齡)。即使你有動態頁面,你也不能在一段時間內改變文件的內容(即使它是10分鐘),所以這可能是有用的。這裏的主要用途是告訴瀏覽器「不斷要求我提供這個文件,如果它是新的,我會給你發送新的文件」。因此,每個頁面加載都會發送一個請求,但如果文件已經很好(304未修改),則答案爲空,因此可以節省帶寬。

您緩存越多,速度就越快的頁面會顯示出來。但沖洗緩存是一項艱鉅的任務,請小心使用。

一個良好的學習這一切都與許多解釋:http://www.mnot.net/cache_docs/

+0

感謝提供解釋。但是,我仍然很難嘗試瞭解如何真正實現您的建議,以實現最大化和最後修改。我在哪裏可以找到一些實際代碼的例子,我將把它們放在我的htaccess中?我是否需要列出每個圖像?我想我基本上理解這裏的概念,但需要一些更明確的幫助,看看在htaccess中看起來會是什麼樣子。 – Andy 2011-06-25 01:56:39

+1

查看在Apache手冊的例子:http://httpd.apache.org/docs/2.3/fr/mod/mod_expires.html(模塊失效)。例如:ExpiresByType image/gif M604800將在7天后自動修改GIF圖像(7 * 86400)。您會在同一頁面上找到許多其他示例。 Last-Modified也可能被髮送,但我不使用Apache,因此我沒有對此進行測試。 – Yvan 2011-08-01 13:13:15

+1

Apache網址壞了,但在這裏archive.org住在:(FR)https://web.archive.org/web/20120418030430/http://httpd.apache.org/docs/2.3/fr/mod /mod_expires.html或https://web.archive.org/web/20120418030430/http://httpd.apache.org/docs/2.3/en/mod/mod_expires.html(EN) – ledlogic 2014-01-29 15:53:42