使用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 仍会为您节省一些渲染。在这里,你将同时使用两者。

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top