有没有人知道在CSS文件中使用查询字符串的任何问题?

时间:2011-10-28 17:01:18

标签: css caching

我们正在对我们的主精灵进行更改,我正在讨论完全更改其名称或在最后添加查询字符串的好处。

保持旧版本支持Google缓存,archive.com等是有逻辑的,但如果我只是编辑文件并向CSS图像添加查询字符串,它在我们的系统上也会更清晰拨打:

#element-id { background-image: url('my-sprite.png?version1'); }

我的问题是,有没有人知道在CSS文件中使用查询字符串缓存破坏程序的任何浏览器问题?

我怀疑浏览器以相同的方式处理css图像请求,无论是来自CSS文件还是通过HTML,因此,只要我的服务器正确表达标题信息,我就应该没问题。

3 个答案:

答案 0 :(得分:20)

tl; dr使用查询参数不是100%的解决方案。

使用资产管道时基本上存在两个问题:

  1. 确保您的资源在您希望的时候进行缓存
  2. 修改文件时使缓存无效。
  3. 查询字符串参数有时会导致网络或浏览器根本不缓存您的资源。更有意思的是,爱尔兰先生指出“查询字符串方法对于Squid代理服务器后面的客户端来说不可靠”,因此对于破坏缓存也是不可靠的。基本上你不想依赖其他人的配置。

    一些参考文献:

    • Rails Guides: Asset Pipeline - Rails资产管道建立在Sprockets项目的基础上,该项目几年来一直专注于解决这些类型的问题。他们特别以粗体表示“并非所有缓存都能可靠地缓存文件名仅因查询参数而异的内容。”

    • Steve Soulders Article on revving assets - 史蒂夫·索德斯(Steve Souders)是一位网络性能大师,奥莱利(O'Reilly)着作“高性能网站”(High Performance Websites)的作者写道,这篇文章在Rails指南中引用,建议使用文件名转换来避免与代理服务器背后的人发生问题。

    • HTML5 Boilerplate Suggestion - 由着名的Paul Irish和Nicolas Gallagher维护的HTML5 Boilerplate项目使用.htaccess来创建一个过滤器来进行文件名加速。他们特别建议使用文件名加速代替查询字符串版本。

答案 1 :(得分:1)

除非浏览器严重破坏,否则应该没有错。假设您要使用动态文件,例如url('/layout.php?section=1')或其他内容。查询字符串在那里是必需的,所以如果浏览器不起作用,它就会被打破。

答案 2 :(得分:0)

您可能遇到的唯一问题是css文件的缓存速度往往超出您的预期。如果my-sprite.png?version1的输出经常发生变化,那么它最好放在页面本身上。