我偶尔会收到使用我网站的人的布局怪癖报告,答案往往是,用Ctrl-F5刷新浏览器/清除缓存。
我能想到的最简单的方法就是将SVN修订版附加到像styles.css?1234
这样的资源的路径上,但是我想知道这是否有点严厉(例如SVN修订版不会改变资源将强制进行不必要的获取)。此外,它需要通过并查找所有这些路径并添加一些代码来输出SVN修订版。
有没有更好/标准的方法来处理这个?
对于它的价值,我正在使用Django,而Apache则使用mod_wsgi。
答案 0 :(得分:2)
最好使用文件的最后修改时间戳。然后,您将避免使用版本号遇到的问题。您还必须在每次请求时转到磁盘以获取最新版本号(如果使用此方法,请使用缓存)或在部署时在“编译”步骤中更改include语句。
此外,如果您执行styles.css?123
某些代理/浏览器可能根本不会缓存文件,无论过期标头如何。最好做styles.123.css
,所有代理都将其视为单独的文件。
有一个项目已经解决了这个问题,我已经用它来取得巨大的成功:django-compress。你告诉它你要如何压缩你的javascript和css,然后它将缩小/压缩,将它们连接成一个大文件,并为大文件提供一个包含时间戳的特殊文件名。在包含知道要包含哪个文件的文件时,您还会获得一个模板标记。
Django 1.3还将包含一个名为staticfiles的应用程序,该应用程序可以帮助提供静态媒体,但它无法解决版本控制问题。
答案 1 :(得分:0)
我过去使用的一种技术是确保为每个静态资产引用使用模板标记。然后我可以根据需要更改该标记,如果我需要将URL更改为资产目录,还可以根据需要添加cachebusting。
即使文件没有改变,我也不担心强制对每个SVN修订版进行不必要的提取 - 它仍然比每次提供新文件更有效。
有各种各样的库为您做这类事情。 knutin已经提到了django-compress,还有django-static-management,django-static以及其他许多人。除了处理cachebusting之外,这些应用程序通常还包含某种压缩/连接,以便将多个CSS或JS文件连接成一个以减少HTTP请求。