Pages

Monday, 15 July 2024

apache启用mod_expires, 为静态页面加上缓存



Expires headers字面翻译:到期头,就是告诉浏览器一个过期时间,在这个过期时间之内,浏览器保留缓存的!这样再次进入博客, 就减少了http 请求了,速度就快了!
如何设置

apache主机的博客目录下有一个.htaccess 这样一个文件(有的是隐藏起来了)。这个文件功能很强大。在里面添加一些语句,就能告诉浏览器到期时间了。

下面一些简单的语句。

    语句格式1:ExpiresByType 类型 A/M+时间(以秒为单位)

A:access表示从浏览器访问时间算起
M:modification表示文件修改时间算起

    如:ExpiresByType image/png A604800 就是设置png格式的缓存时间为7天

    语句格式2:ExpiresByType 类型 描述性语言

描述性语言:modification、access、now |plus|years、months、weeks、days、hours、minutes、seconds

    如:ExpiresByType image/png “access plus 7 days” 设置png格式的缓存时间为7天

    语句格式3:匹配格式

 <FilesMatch "\.(jpg|jpeg|png|gif|swf)$">
  ExpiresDefault A604800
  </FilesMatch>   

    表示匹配jpg|jpeg|png|gif|swf格式的文件缓存为7天

是不是很简单!

然后给出我写的,你可以在此基础上根据你的更改频率修改。

<IfModule mod_expires.c>
#开启
ExpiresActive On

#以下是针对不同的文件类型设置不同的缓存时间
ExpiresByType image/x-icon A2592000
ExpiresByType application/x-javascript A2592000
ExpiresByType text/css A2592000
ExpiresByType image/gif A604800
ExpiresByType image/png A604800
ExpiresByType image/jpeg A604800
ExpiresByType text/plain A604800
ExpiresByType application/x-shockwave-flash A604800
ExpiresByType video/x-flv A604800
ExpiresByType application/pdf A604800
ExpiresByType application/javascript "access plus 1 year"
ExpiresByType image/svg A604800

</IfModule>

一些规则

    静态文件:落实“永不过期”的原则,通过设置一个足够长的过期时间来实现。
    动态文件:设置一个适当的 Cache-Control 头。怎么才算适当?原则很简单,根据这个动态内容的变更频率做出设置,经常修改的,就设置较短的过期时间,不怎么变动的就设置长一些的过期时间。
    html文件绝对不要缓存,否则会出现一系列的问题!这一点在 PageSpeed 的 Leverage browser caching 规则中也明确提到了:

    In general, HTML is not static, and shouldn’t be considered cacheable.

    通常是这些文件类型需要缓存:
        Images: jpg, gif, png
        favicon/ico
        JavaScript: js
        CSS: css
        Flash: swf
        PDF: pdf
        media files:视频,音频文件
    为静态文件名加上时间戳或版本号(非常重要!不然访客怎么知道你的要不要清除缓存来获得最新的代码文件呢)

最后要注意的就是添加了(长时间的) Expires headers 的文件,如果在设置的过期时间内需要修改时,你必须修改文件名或者添加修改文件的时间戳。这样用户再访问页面时,才会向服务器请求新文件。例如你需要修改首页的layout.css文件,你可以这么处理:

// 原来的调用处理
<link href="/css/layout.css" rel="stylesheet" />

// 调用新文件的处理
<link href="/css/layout-v20140913.css" rel="stylesheet" />

// 或者这么处理
<link href="/css/layout.css?version=v20140913" rel="stylesheet" />

参考文章:
apache启用mod_expires或mod_headers设置静态文件缓存时间

 
前端性能优化:Add Expires headers

No comments:

Post a Comment