0

我在一个网站上工作,一旦完成 js 文件和图片可能几周、几个月甚至几年都保持不变,谁知道呢。所以我认为如果我可以指示浏览器下载并忘记,我可以获得巨大的性能提升,也就是说:如果文件已经在本地缓存中,不管其他任何东西,检索并使用该版本,所以文件的唯一方法是如果用户清除浏览器的缓存,将被下载两次。这显然意味着一个承诺,因为如果我的网站中的某些内容发生更改,我也将被迫更改受影响文件的名称,但具有能够在我需要时覆盖浏览器本地缓存的巨大优势或想要,获得对它的完全控制,快速,简单并且浪费零带宽和 CPU 周期。

我试图通过将正确的缓存命令添加到 HTTP 响应标头来实现这一点。这是一个示例:

HTTP/1.1 200 OK
Connection: Keep-Alive
Date: Sat, 27 Jul 2013 02:24:05 GMT
Content-Type: application/x-javascript
Content-Encoding: gzip
Content-Length: 13728
Last-Modified: Sat, 27 Jul 2013 00:37:59 GMT
ETag: "20130726193759"
Expires: Sat, 26 Jul 2014 05:00:00 GMT
Cache-Control: public, max-age=31536000

正如您可能意识到的那样,我正在指示浏览器将文件保存在其缓存中一整年。但我不知道我是否做错了什么,因为桌面浏览器仍然使用If-None-Match参数发出文件请求,在这种情况下,我只是告诉他们文件没有改变,这是次优的,但Android浏览器的情况更糟,因为它发出的请求就像是第一次一样。

谁能告诉我我做错了什么???

4

1 回答 1

1

.htaccess您需要使用文件打开浏览器利用缓存。

为了使浏览器缓存文件,例如图像、样式表、JavaScript 等,您需要使用.htaccess文件打开 Leverage Caching,通过该文件您可以明确告知浏览器特定内容不会更改指定时间段 - 一周/月/年。由于浏览器不会重复请求该内容,它将大大提高您的页面加载速度,以便将来从同一浏览器访问。

在您的.htaccess文件中,您可以添加以下内容(对于不会更改的文件)

ExpiresActive On
ExpiresByType image/jpg "access plus 1 year"
ExpiresByType image/jpeg "access plus 1 year"
ExpiresByType image/gif "access plus 1 year"
ExpiresByType image/png "access plus 1 year"
ExpiresByType text/css "access plus 1 month"
ExpiresByType application/pdf "access plus 1 month"
ExpiresByType text/x-javascript "access plus 1 month"
ExpiresByType application/x-shockwave-flash "access plus 1 month"
ExpiresByType image/x-icon "access plus 1 year"
ExpiresDefault "access plus 2 days"

因此,您可以通过这种方式发送 HTTP 标头来设置不同文件的到期日期。

您可以在此处参考一篇文章,该文章将详细介绍杠杆缓存以及如何打开它。

于 2013-07-27T02:40:31.500 回答