Rails – etags与页面缓存(文件缓存)

使用etags / stale会有什么好处?/ fresh_when? 而不是页面缓存(在文件缓存上)?

Apache自动处理静态文件的etags,但即使它没有,页面缓存仍然会更好,因为Rails应用程序甚至不会被调用。

那么,在什么情况下我会使用Rails提供的方法(过时?/ fresh_when?)?

他们真的是免费的。 Etags / fresh_when等帮助您使用下游缓存(例如您自己的Varnish / Squid实例或Rack :: Cache或浏览器缓存或ISP代理服务器…)

页面缓存使您无法完全访问rails堆栈,因为Apache /您的Web服务器为文件提供服务,因此不会进行数据库查找。 但是你必须处理缓存过期以保持缓存新鲜。

使用etags / conditional get,您不需要节省大量处理时间,因为您仍需要获取页面上使用的所有记录:

def show @article = Article.find(params[:id]) @feature = Feature.current fresh_when :etag => [@article, @feature] end 

在用户拥有当前页面的情况下,它可以节省一些渲染时间和发送页面所需的带宽。

我遇到的另一个用途是,在让Rails分发“304 Not Modified”标题之前,你仍然可以处理一些信息。 就像你想要记录命中页面一样。

我想到的一件事是,即使你清除了整个页面缓存, fresh_when仍会保存一些渲染。 在这里你将同时使用两者。

我也对其他答案感到好奇。