当PageSpeed Insights检测到您的服务器响应不包含明确的缓存标头或某些资源被指定只缓存一小段时间时,就会触发此规则。

개요

사용자가 웹 사이트를 여러 번 방문할 경우, 정적 리소스의 브라우저 캐시를 사용하면 사용자의 시간을 절약할 수 있다. 캐시 헤더는 작은 정적 리소스(예: 그림)만이 아니라 캐시할 수 있는 모든 정적 리소스에 적용되어야 합니다. 캐시할 수 있는 리소스에는 JS 및 CSS 파일, 이미지 파일 및 기타 이진 개체 파일(미디어 파일, PDF 파일 등)이 포함됩니다. 일반적으로 HTML은 정적 리소스가 아니며 기본적으로 캐시 가능한 리소스로 간주되지 않습니다. 웹 사이트의 HTML에 적용되는 캐싱 정책을 고려해야 합니다.

제안

为您的服务器启用浏览器缓存。静态资源应该至少有一周的缓存有效期。广告或小部件这类的第三方资源也应该至少有一天的缓存有效期。对于所有可缓存资源,我们建议您进行以下设置:

  • Expires최소 1주일에서 최대 1년까지 미래 날짜를 설정합니다.Expires,而不设置Cache-Control:max-ageRFC 지침에 위배되므로 1년 이상의 미래 날짜로 설정하지 마십시오.
  • 자원이 변경되는 시점을 알고 있다면 만료 날짜를 더 짧게 설정할 수 있습니다. 그러나 리소스가 변경될 가능성이 있지만 시간을 알 수 없다고 판단되는 경우에는 만료 날짜를 길게 설정하고 웹 주소의 지문을 사용하십시오(아래 설명).

Expires和Cache-Control: max-age标头

这些标头用于指定相应时间段,浏览器可在指定的这段时间内使用已缓存的资源,而无需查看网络服务器是否提供了新版资源。这些缓存标头功能强大,没有任何应用条件限制。在设置这些标头并下载资源后,浏览器不会为资源发出任何GET请求,除非过期日期到期或达到时间最大值,亦或是用户清除了缓存。

Last-Modifed 및 ETag 헤더

这些标头可用于指定浏览器应如何确定用于缓存的文件是否相同。在Last-Modified标头中指定的是日期,而在ETag标头中指定的则可以是唯一标识资源的任意值(通常为文件版本或内容哈希值)。Last-Modified브라우저가 휴리스틱을 사용하여 캐시에서 내용을 캡처해야 하는지 여부를 결정하기 때문에 기능이 "약한"캐시 헤더입니다.

借助这些标头,浏览器可以通过在用户明确重新加载页面时发出条件式GET请求,有效地更新其已缓存资源。除非您在服务器端更改资源,否则条件式GET请求不会返回完整的响应,因此相较于完整GET请求,此类请求的延迟较小。

我应使用哪个缓存标头?

对于所有可缓存资源,指定一个ExpiresCache-Control max-age以及一个Last-Modified또는ETag至关重要。您没必要同时指定ExpiresCache-Control: max-age; 또는 동시에 지정Last-ModifiedETag.

웹 주소 지문 사용

对于偶尔发生变化的资源,我们可以让浏览器缓存相应的资源,直到该资源在服务器上出现变化,而服务器则在此时通知浏览器有新版本可用。我们可以通过为每个版本的资源指定一个唯一网址来实现这一目的。例如,假定我们有一个名为“my_stylesheet.css”的资源。我们可以将文件重命名为“my_stylesheet_fingerprint.css”。当资源发生变化时,其指纹就会发生变化,对应的网址也会随之更改。网址一经更改,系统就会强制浏览器重新抓取资源。通过指纹,我们甚至可以为变化更为频繁的资源设置将来的过期日期。

지문 인식의 일반적인 방법은 파일 내용의 해시 값을 인코딩하는 128비트 16진수를 사용하는 것이다.

另一个策略是直接为新版应用创建新版目录,然后为版本目录中的各个版本放置所有资源。这样做的缺点是,如果各个版本中的资源未发生变化,则其网址将仍会更改以强制重新下载。使用内容哈希值不会遇到该问题,但这种方法稍微复杂一些。

 

Except as otherwise noted, the content of this page is licensed under the Creative Commons Attribution 3.0 License, and code samples are licensed under the Apache 2.0 라이센스. For details, see ourSite Policies.