performance
performance copied to clipboard
Add Site Health test to verify that static assets are served with far-future expires
Feature Description
In order to leverage the browser cache effectively, page assets like images, scripts, and stylesheets should all be served with far-future expires. A Site Health test could be added which checks for the necessary asset response headers (i.e. Cache-Control and/or Expires) and warns when they are not present. The call to action would be to fix the web server configuration, potentially prompting the user to contact their host.
That makes sense, should we define the cache headers list and what we consider far-future expire?
I think the headers would be Cache-Control with max-age and/or an Expires. As for the time that should be considered future, I recall generally 1 year as being normal for this. But 1 week would probably work just as well. In any case, the threshold should be filterable.
Also, there could be some cases where an author needs for an asset to not have a far-future expiration date. In that case, there could be a filter to exclude it from the test.
Lastly, in addition to far-future expiration, the test could also check for ETag and Last-Modified and if no far-future expiration is present, do a secondary request to the same asset URL with If-None-Match and If-Modified-Since, respectively. If those return with 304 Not Modified then that could pass the test as well, although not as good as far-future expiration.
@westonruter out of curiosity, do you think this is something that a site admin could take direct action on?
That's a good question. Most likely, yes, because a plugin or theme would be responsible for sending that header. The problem then becomes figuring out which is responsible.
Edit: Oops, I thought this comment was about https://github.com/WordPress/performance/issues/1692
Good question. Maybe not directly. They'd have to ask their host to fix the static asset response headers. But I do know that some plugins can modify .htaccess files to add the required rules, assuming they're on Apache.