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

时间:2009-05-06 22:10:36

标签: ruby-on-rails caching etag

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

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

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

3 个答案:

答案 0 :(得分:5)

他们真的是免费的。 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

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

答案 1 :(得分:2)

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

答案 2 :(得分:0)

有一点我想到的是,即使您清除了整个页面缓存,fresh_when仍会为您节省一些渲染。在这里,你将同时使用两者。

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