【发布时间】:2016-02-29 19:27:41
【问题描述】:
我正在尝试在 Rails 中实现片段缓存。如果没有缓存,代码如下所示:
<div>
<% data = MyObject.getDataFromDataBase %>
<!-- complicated divs displaying the 'data', multiple partials -->
</div>
它创建了很多 SQL 查询(在视图中),并且总体而言,需要:
Completed 200 OK in 1107ms (Views: 1007.0ms | ActiveRecord: 93.6ms)
用这样的缓存包裹起来之后:
<div>
<% cache 'my_cached' do %>
<% data = MyObject.getDataFromDataBase %>
<!-- complicated divs displaying the 'data', multiple partials -->
<% end %>
</div>
我看到了输出(在第二次刷新时)——没有 SQL 查询(除了用户角色检查),什么都没有,只是:
Read fragment views/my_cached/bda6867d8a08ec1637c0c926edced2d2 (0.7ms)
Completed 200 OK in 1241ms (Views: 1228.7ms | ActiveRecord: 6.8ms)
我的问题是:这怎么可能,缓存后需要更长的时间?日志中什么也没有发生,文件在 0.7 毫秒内加载,为什么总共需要超过 1 秒?
【问题讨论】:
-
好像你少了一个
do:<% cache 'my_cached' do %> -
是的,问题写错了。
-
在github.com/rails/rails/issues/35257 Aaron 指出当partial 非常小时,partial 缓存非常慢。
标签: ruby-on-rails ruby caching