Pat*_*ard 9 caching assets google-chrome ruby-on-rails
我正在尝试在Ruby on Rails中优化我的应用程序,我意识到我的应用程序中的图片是加载所需的最长时间,但我也注意到另一个问题,即谷歌浏览器没有缓存图像.
我注意到这一点,因为在Google Developers Console中,您可以看到Google Chrome会请求加载在图像真正加载之前取消的图像.
这可以在这里看到,首先我打开谷歌开发者控制台,然后刷新页面,在第一个请求中你可以看到图像,但它们会立即被取消.
之后,您可以看到实际加载图像的请求.
我不明白为什么会出现这种情况,如果在响应头,你可以看到,Cache Control被设定为public与max-age = 31536...
我把这些图像放在我的应用程序中:
<div class="col-xs-3"><%= image_tag "#{@hero.id}/ability_1.png", class: "center-block"%></div>
Run Code Online (Sandbox Code Playgroud)
并且图像被组织在文件夹中 app/assets/images
有没有RoR方法来解决这个问题?
编辑:现在在Windows中测试我的应用程序(在Heroku中)我注意到事实上Google Chrome有时会缓存图像,但它发生在50%的时间(当我在Ubuntu开发时它不起作用一个单一的时间),而在Firefox中首次图像加载,但随后的时间我打开我甚至无法注意到重装了同样的观点,这是beatiful,为什么谷歌Chrome是不是这样呢?谷歌浏览器行为如此奇怪是正常的吗?
分析浏览器缓存时最重要的事情是"状态代码".在您的示例中,您可以看到您有一个"304",表示"未修改",这意味着浏览器"可能会使用它的缓存".所以你实际上是在缓存.缓存!=没有命中你的网络服务器.
根据Mozilla的定义:
这用于缓存目的.它告诉客户端响应未被修改.因此,客户端可以继续使用相同的缓存版本的响应.
它将etag和最后修改后的内容发送到您的Web服务器,然后您的Web服务器查看这些元数据并说"不,这个文件没有改变,所以随意使用您的缓存",就是这样.它实际上不会再次发送文件.您可以看到"大小"远小于它是"200"状态代码,其中Web服务器正在发送文件,并且时间也应该短得多.
在Chrome中,您可以通过选中"网络"标签中的"禁用缓存"选项来强制"非缓存".
希望有所帮助!
| 归档时间: |
|
| 查看次数: |
935 次 |
| 最近记录: |