由于 Rails 4 删除了页面缓存和动作缓存,我想知道 Rails 4 缓存没有变量且视图中只有 html 的动作的方法是什么?我应该片段缓存视图中的静态 html 吗?当没有模型将其设置为过期时,如何设置 etag/fresh_when?我正在努力寻找一个示例或约定来缓存应该是最容易缓存的页面。
需要注意的是,虽然视图是完全静态的,但页面仍然有一个动态导航栏,具体取决于用户是否登录。你将如何处理这样的静态页面,而不使用动作缓存,因为它已被删除并且约定已设置为不使用 gem 版本?
例子:
class HomesController < ApplicationController
def index
end
end
家园/index.html.erb
<div>A bunch of normal html tags with no erb</div>
编辑: 根据@severin 的回答和我自己的研究,这是我迄今为止提出的。
class HomesController < ApplicationController
def index
fresh_when(["some-identifier", current_user, flash])
end
end
此外,我使用https://github.com/n8/bust_rails_etags在部署后重置所有 etag,因为视图可能在部署之间发生了变化。我认为这很好地涵盖了 etag,尽管我仍然很好奇何时会自动包含一些关于视图的标识符以及是否需要“some-idnetifier”?有时 current_user 和 flash 会为零会是一个问题吗?
现在在片段缓存静态内容的第二点上。我假设如果我这样做了:
cache "v1" do
all my html
end
我必须记住在页面更改时始终更改缓存标识符,否则我的应用程序将提供陈旧的内容。有什么方法可以自动执行此操作,还是已经由 Rails 处理?最好只缓存上次更新视图的时间或一些聪明的东西,这样我就不必跟踪我的静态内容何时更改。