资源缓存(Cache)是一个非常重要的提高网站性能的方法,它可以让再次访问的用户不用下载已经缓存的资源文件,从而减少从服务器下载的开销提高访问速度。
1)配置缓存
对于Apache服务器来说,设置缓存配置也是非常方便的。可以使用mod_expires模块,添加如下配置:
<FilesMatch "/.(gif|jpg|js|css)$">
ExpiresDefault "access plus 1 year"
</FilesMatch>
这个表明所有的后缀为gif, jpg, js 和css文件都设置缓存一年。
验证缓存设置是否成功只需要看HTTP响应头里面是否包含expires或者Cache-Control: max-age。
2)缓存时间
设置缓存时间可能需要根据不用网站,对于内容更新比较频繁的网站,可以缓存时间可以设置较短。对于内容比较固定的网站,则可以设置较长的缓存时间,例如十年。
3)资源更新
利用缓存设置可以让浏览器知道这个文件到什么时候过期,例如我们设置缓存时间是1年,那么在用户第一次访问一个页面下载资源文件,这些资源文件就会被浏览器缓存起来。在1年内,用户访问同样的页面如果要下载同样的资源文件,那么浏览器就会从缓存中读取而不需要再从服务器下载。
缓存会带来一个问题,那就是如果服务器端文件更新,如何能够让浏览器能够下载到更新的文件呢?
方法一:在url加版本信息,例如xxx.js?ver=1.2,这是一种非常简单的方法,但有些proxy不能缓存有参数的url。
方法二:改变文件名,例如xxx_hashkey.js。由于文件名的改变,自然会导致原来的url改变,所以浏览器是会重新下载更新的资源文件。
4)版本管理
改变文件名是推荐的方法,那么如何实现?
a) 可以使用ant脚本,每次在build过程中根据Hash Key来改变文件名,并且将在页面中引用的地方也修改对应的文件名
b) 通过apache rewrite模块来实现url重定向,详细可以参考这篇Automatically Version Your CSS and JavaScript