在Rails 3.1开发模式下(使用资产管道时),从资产/图像提供的图像通过响应头“Cache Control:must-revalidate”提供。在Rails 3.1中以开发模式启用图像缓存
这意味着Google Chrome浏览器(看起来只有Chrome浏览器)会尝试多次重新获取图像 - 即使在单页面视图中也是如此。这导致了所有通过JavaScript操作DOM操作的棘手问题。仅举几例:
- jQuery UI的可拖动有时有戏剧性的鼠标光标
- 添加或删除CSS类引用了图像闪烁或同时图像的要求调整(这将始终返回偏移304未修改)正在进行中。
- 附加或替换包含图像的HTML节点将触发更多的图像抓取,这将导致Chrome浏览器等待每个图像的304响应时,其下方的整个节点树会出现口吃。
我完全可以理解为开发服务器做一件合理的事情。我甚至可以理解,即使在单个页面视图内,Chrome拒绝缓存图像也是合理的。
那么,有没有办法改变Rails应用于开发中的图像响应的缓存控制头?
更新:如同一对夫妇所建议的,更有趣的问题是为什么Chrome浏览器尝试在浏览视图中多次重新提取图片,而其他浏览器似乎没有? (为什么这不会导致其他开发者的问题?)
更新x2:我不打算提交这个答案,因为它只是一个解决方案,恰好足以满足我的目的,但我们通过预编译资源,然后丢弃预编译的CSS,可以解决这个问题。 (这需要链轮调试被打开,以虚假的development.rb
)
rake assets:precompile
cd public/assets
find . -name "*.js*" -exec rm -rf {} \;
find . -name "*.css*" -exec rm -rf {} \;
我想不出一个Rails配置的这一点,也许做一些挖掘链轮配置而不是? – 2012-01-18 20:36:08