对于(企业)Web项目,我希望保留以前版本的静态文件,以便项目在准备好实现设计更改时可以自行决定。我的初步计划是提供静态内容的文件夹,如下所示:
company.com/static/1.0.0/
company.com/static/1.0.0/css/
company.com/static/1.0.0/js/
company.com/static/1.0.0/images/
company.com/static/2.0.0/
company.com/static/2.0.0/css/
company.com/static/2.0.0/js/
company.com/static/2.0.0/images/
这些文件夹中的每个文件都应该具有“永久”缓存的缓存策略 - 至少一年。我还计划将css文件和js文件连接成一个,以便最小化请求数。
然后我还会提供一个current
文件夹(符合最新发布版本的符号链接)
company.com/static/current/
company.com/static/current/css/
company.com/static/current/js/
company.com/static/current/images/
这将解决我的第一个问题(项目和子网站可以将代码锁定到某个版本,并且只要它们准备好就可以升级。)
但后来我可以看到一些缓存问题。现在我不能“只”缓存current
文件夹,因为它会针对每个版本进行更改。我的缓存策略应该在该文件夹上。
此外,对于每个版本,大多数静态文件无论如何都不会改变。永久缓存它们是否相关,如果有变化则重命名?
我在这里寻求建议,因为我想知道你在缓存和更改文件之间的最佳平衡。
答案 0 :(得分:1)
小心HTTP缓存。我前段时间调查了这个。 my blog article on the HTTP caching
答案 1 :(得分:1)
您可以选择三种方法:
/current
文件夹,只需要避免.html
页面缓存并在其中放置适当的资源路径。/current
文件夹并将ETag添加到您的资源中,在这种情况下,将从客户端发出另一个服务器请求,但它将是条件请求(即If-None-Match
标题),因此您可以返回304响应(没有资源主体),直到您的客户决定迁移到另一个版本。此类解决方案的另一个缺点(如果您有多个客户使用不同的版本),/current
文件夹将只包含一些单一版本的设计。/current/js/combined.js?version=1.0.0.0
但这与第一种方法没有太大区别。希望这有帮助。
答案 2 :(得分:1)
看看谷歌,微软等公司如何为他们的jQuery CDN实施缓存策略,这可能是值得的。
对于版本化的网址,您的永久缓存政策是可以的。
对于当前的网址,您显然需要更短的到期时间。
要考虑的事情:
应用程序如何能够针对/ current进行测试/即如果他们使用它,您如何知道更改不会破坏现有应用程序?
永远缓存只是为了减少“当前会话”期间的请求,因为大多数浏览器缓存都不足以长时间保存文件(当人们浏览其他网站时,它们会被删除)