代码之家  ›  专栏  ›  技术社区  ›  Dominic Rodger

在Subversion中更改文件时更新资源路径(CSS/JS)

  •  1
  • Dominic Rodger  · 技术社区  · 15 年前

    偶尔我会从使用我的网站的人那里得到关于布局异常的报告,答案往往是,用Ctrl-F5刷新浏览器/清除缓存。

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

    有更好/标准的方法来处理这个问题吗?

    值得一提的是,我将Django和Apache与mod-wsgi一起使用。

    2 回复  |  直到 15 年前
        1
  •  2
  •   knutin    15 年前

    最好使用文件的最后修改时间戳。这样就避免了版本号带来的问题。您还必须在每次请求时都转到磁盘以获取最新的修订号(如果使用此方法,请使用缓存),或者在部署时在“编译”步骤中更改include语句。

    而且,如果你这样做了 styles.css?123 有些代理/浏览器可能根本不缓存文件,而不管到期头。最好是这样做 styles.123.css ,所有代理都将其视为单独的文件。

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

    Django 1.3还将包括一个名为 staticfiles 这有助于为静态媒体提供服务,但不能解决版本控制问题。

        2
  •  0
  •   Daniel Roseman    15 年前

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

    即使文件没有更改,我也不会担心为每个SVN修订版强制执行不必要的获取操作—它仍然比每次提供新的文件更有效。

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