某些静态资源(如图片、字体、JS库、CSS样式表等),并不需要经常修改,我们便可以通过传递Cache-Control Header让浏览器客户端将这些资源加入到本地缓存中,当用户下次浏览时便可直接通过缓存加载资源文件,而不需要重新下载。

在Apache服务器中设置数据缓存,其实只需要通过 .htacess 文件即可完成,非常的简单!

<IfModule mod_headers.c>
    <FilesMatch ".(js|css|swf)">
        Header set Cache-Control "max-age=86400"
    </FilesMatch>
</IfModule>
上面的代码将JS、CSS这些静态资源缓存一天的时间(86400秒),你甚至可以设置同类型文件为不同的缓存时常,比如下面的代码:
<IfModule mod_headers.c>
    <FilesMatch ".(js|css|swf)">
        Header set Cache-Control "max-age=86400"
    </FilesMatch>
    <FilesMatch ".(min|pack).js">
        Header set Cache-Control "max-age=2592000"
    </FilesMatch>
</IfModule>
这段代码让后缀名为.min.js.pack.js的JS代码缓存一个月的时间,而其他JS代码则正常缓存一天!
按照这个思路,我们可以将某些比较庞大的JS库缓存比较长的时间,一些经常需要修改与热更新的JS代码缓存较短时间。

那如果我更新了某个比较庞大的JS库时,要如何让客户端及时得到更新呢?
这个时候,你只需要在资源链接后面添加一个?无意义描述符,即可让客户端认为你链接了一个新的资源,同时也不会影响其他的缓存效果!
<script type="text/javascript" src="/jquery.min.js?v1.2.3.4"></script>
<link rel="stylesheet" href="/mynewstyle.css?v2019-03-20" />
再或者,在网页上提醒你的用户使用Shift+F5或者Ctrl+F5(IE)强制刷新整个网页的缓存即可!
下面是本站的缓存与文档MimeType设置,仅供各位参考:
# MimeType 补充与修正
<IfModule mod_mime.c>
AddType application/javascript .jsonp
AddType application/json .json
AddType image/webp .webp
AddType image/x-icon .ico
AddType image/x-icon .icon

AddType image/svg+xml .svg .svgz
AddEncoding gzip .svgz
AddType application/x-font-ttf .ttc .ttf
AddType application/x-font-opentype .otf
AddType application/font-woff .woff
AddType application/font-woff2 .woff2
AddType application/vnd.ms-fontobject .eot
AddType application/font-sfnt .sfnt
</IfModule>

# 缓存策略,图片、字体、JS库缓存一个月,其他资源缓存一天
<IfModule mod_headers.c>
<FilesMatch ".(jpeg|jpg|gif|png|webp|ico|icon|svg|svgz|woff|woff2|eot|otf|ttf|ttc|sfnt)">
Header set Cache-Control "max-age=2592000"
</FilesMatch>
<FilesMatch ".(js|css|swf)">
Header set Cache-Control "max-age=86400"
</FilesMatch>
<FilesMatch ".(min|pack).js">
Header set Cache-Control "max-age=2592000"
</FilesMatch>
</IfModule>