简单的客户端技术
一般来说,缓存是好的……所以有几种技术,这取决于您是在开发网站时自己解决问题,还是在生产环境中尝试控制缓存。
您网站的一般访问者将不会获得与您在开发网站时相同的体验。由于普通访问者访问该站点的频率较低(每个月可能只有几次,除非您是 Google 或 hi5 Networks),因此他们不太可能将您的文件缓存,这可能就足够了。
如果你想强制一个新版本进入浏览器,你总是可以在请求中添加一个查询字符串,并在进行重大更改时增加版本号:
<script src="/myJavascript.js?version=4"></script>
这将确保每个人都能获得新文件。它起作用是因为浏览器查看文件的 URL 以确定它是否在缓存中具有副本。如果您的服务器未设置为对查询字符串执行任何操作,它将被忽略,但该名称对于浏览器来说看起来就像一个新文件。
另一方面,如果您正在开发网站,您不希望每次保存对开发版本的更改时都更改版本号。那会很乏味。
因此,在您开发网站时,一个很好的技巧是自动生成查询字符串参数:
<!-- Development version: -->
<script>document.write('<script src="/myJavascript.js?dev=' + Math.floor(Math.random() * 100) + '"\><\/script>');</script>
向请求添加查询字符串是对资源进行版本控制的好方法,但对于简单的网站,这可能是不必要的。请记住,缓存是一件好事。
还值得注意的是,浏览器不一定会吝啬将文件保存在缓存中。浏览器有针对此类事情的策略,它们通常按照 HTTP 规范中规定的规则进行操作。当浏览器向服务器发出请求时,响应的一部分是一个Expires标头……一个告诉浏览器它应该在缓存中保留多长时间的日期。下次浏览器遇到对同一个文件的请求时,它会看到缓存中有一个副本,并查看到期日期来决定是否应该使用它。
不管你信不信,实际上是你的服务器使浏览器缓存如此持久。您可以调整您的服务器设置并更改Expires标头,但我上面写的小技巧可能对您来说是一种更简单的方法。由于缓存是好的,您通常希望将该日期设置为遥远的未来(“Far-future Expires Header”),并使用上述技术强制更改。
如果您对有关 HTTP 或如何发出这些请求的更多信息感兴趣,那么 Steve Souders 所著的“高性能网站”就是一本好书。这是对这个主题的一个很好的介绍。