2011-05-01 148 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