9

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

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

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

4

3 回答 3

5

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

页面缓存使您免于完全使用 Rails 堆栈,因为 Apache/您的网络服务器为文件提供服务,因此无需进行数据库查找。但是您必须处理缓存过期以保持缓存新鲜。

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

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

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

于 2009-07-09T12:25:34.817 回答
2

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

于 2009-05-07T14:56:54.400 回答
0

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

我也很好奇其他答案。

于 2009-05-06T22:14:53.123 回答