1

有时我会从使用我的网站的人那里收到有关布局怪癖的报告,答案往往是使用 Ctrl-F5 刷新浏览器/清除缓存。

我能想到的最简单的处理方法是将 SVN 修订附加到此类资源的路径中styles.css?1234,但我想知道这是否有点笨拙(例如,不更改资源的 SVN 修订将强制进行不必要的提取) . 此外,它需要遍历并找到所有这些路径并添加一些代码来输出 SVN 修订版。

有没有更好/标准的方法来处理这个?

对于它的价值,我正在使用 Django,以及带有 mod_wsgi 的 Apache。

4

2 回答 2

2

最好使用文件的最后修改时间戳。然后,您将避免使用版本号遇到的问题。您还必须在每次请求时访问磁盘以获取最新的修订号(如果使用此方法,请使用缓存)或在部署时在“编译”步骤中更改包含语句。

此外,如果您执行styles.css?123某些代理/浏览器可能根本不会缓存文件,无论过期标头如何。最好这样做styles.123.css,所有代理都将其视为单独的文件。

有一个项目已经解决了这个问题,我用自己取得了巨大的成功:django-compress。你告诉它你想如何压缩你的javascript和css,然后它会缩小/压缩,将它们合并成一个大文件,并给大文件一个包含时间戳的特殊文件名。您还可以在包含知道要包含哪个文件的文件时使用模板标记。

Django 1.3 还将包含一个名为staticfiles的应用程序,它有助于提供静态媒体,但它不能解决版本控制问题。

于 2010-11-23T10:05:03.967 回答
0

我过去使用的一种技术是确保我为每个静态资产引用使用模板标记。然后我可以根据需要更改该标签,如果我需要更改资产目录的 URL,也可以根据需要添加 cachebusting。

即使文件没有更改,我也不担心为每个 SVN 修订版强制进行不必要的提取 - 它仍然比每次提供一个新版本更有效。

有各种库可以为您做这种事情。knutin 已经提到了 django-compress,还有django-static-managementdjango-static可能还有很多其他的。除了处理缓存破坏之外,这些应用程序通常包括某种压缩/连接,以便将多个 CSS 或 JS 文件连接成一个以减少 HTTP 请求。

于 2010-11-23T11:13:00.803 回答