什么是Ruby On Rails资产管道指纹的重点?

时间:2014-02-20 02:06:14

标签: ruby-on-rails caching nginx

这对某些人来说似乎非常明显,但我很难理解使用摘要指纹编译rails资产背后的观点。当然,Last Modified标头是破坏缓存所需的全部内容。

最近遇到了一个问题,我正在部署到2台服务器,而我正在服务器上编译资产。两台服务器之间的请求得到了平衡,Nginx正在为这些资产提供服务。我注意到最后修改的时间戳略有不同,可能是由于不同服务器上发生的编译。因此,当请求来自用户时,浏览器从未缓存资产,因为每个请求都提供application-0fo45k46oi574634....js,这是相同的文件名但具有不同的上次修改时间,因此它只响应200而且从不304.我可以在本地编译以解决上次修改时间的差异,但我仍然想知道如果编译新文件需要破解缓存,指纹的重点是什么。

我确定有一个很好的解释。

由于

1 个答案:

答案 0 :(得分:1)

指纹识别的目的是仅在文件内容发生变化时提供可靠的缓存失效,而不是因为时间戳变化太频繁,或者是因为缓存策略在URL包含查询字符串时不缓存。

http://guides.rubyonrails.org/asset_pipeline.html#what-is-fingerprinting-and-why-should-i-care-questionmark

编辑:我现在已经远离了我的专业领域,但我认为这可能是因为缓存策略的哲学差异而发生的。随着etag&最后修改后,服务器必须执行If-Modified-Since和If-None-Match请求,这可能需要服务器资源。在这种情况下,不需要指纹识别,因为如你所说,最后修改足以破坏缓存。

但是,另一个策略是删除etag& amp;最后修改,并使用expires +指纹识别。在这种情况下,服务器将不需要执行if- *请求,并且当文件名更改(或者它到期时,以先到者为准),缓存无效。因此,基于我的阅读,似乎只有使用expires +指纹识别缓存策略才有必要。 https://webmasters.stackexchange.com/questions/27694/last-modified-etags-to-include-or-not