Ruby on rails 是否每次加载页面时都执行相关计算?

Ruby on rails 是否每次加载页面时都执行相关计算?,ruby-on-rails,ruby,performance,ruby-on-rails-4,load,Ruby On Rails,Ruby,Performance,Ruby On Rails 4,Load,我有一个模型“包装器”,它有许多另一个模型“类别”,反过来又有许多另一个模型“东西” “Thing”具有整数属性:count和:number。它还有一个在models/thing.rb中定义的实例方法: def ratio (self.count + self.number).to_f / Thing.all.count.to_f end def thing_ratios self.things.sum(&:ratio.to_f) end 那么,“Category”有这个实例

我有一个模型“包装器”,它有许多另一个模型“类别”,反过来又有许多另一个模型“东西”

“Thing”具有整数属性
:count
:number
。它还有一个在
models/thing.rb
中定义的实例方法:

def ratio
  (self.count + self.number).to_f / Thing.all.count.to_f
end
def thing_ratios
  self.things.sum(&:ratio.to_f)
end
那么,“Category”有这个实例方法,在
models/Category.rb
中定义:

def ratio
  (self.count + self.number).to_f / Thing.all.count.to_f
end
def thing_ratios
  self.things.sum(&:ratio.to_f)
end
最后,我的
wrapper.html.erb
视图显示了类别,按
thing\u比率的顺序列出:

<%= @wrapper.categories.all.order(&:thing_ratios).each do |category| %>
  ...

...

我的问题是:每次有人重新加载页面
wrapper.html.erb
,是否必须重新计算每个相关计算,一直到
self.count
,计算与页面上每个类别相关的每件事情?

是的,每次都会重新计算。如果这是一个昂贵的操作,您应该为计数添加一个计数器缓存(指南:),并使用memcache之类的服务缓存查询结果

存在许多缓存策略,但对于数据库/Rails应用程序本身来说,缓存被认为是最灵活的方法。如果您的数据不经常更新(这意味着您不需要经常担心缓存过期),那么您就可以使用页面缓存——如果是这样的话,算您走运吧

让您开始的一些资源: DHH关于俄罗斯玩偶缓存:)

缓存密钥上的Railscast:

高级缓存指南:

不是免费的,但我发现这个系列真正让我正确理解了各种形式的缓存:

是,每次都会重新计算。如果这是一个昂贵的操作,您应该为计数添加一个计数器缓存(指南:),并使用memcache之类的服务缓存查询结果

存在许多缓存策略,但对于数据库/Rails应用程序本身来说,缓存被认为是最灵活的方法。如果您的数据不经常更新(这意味着您不需要经常担心缓存过期),那么您就可以使用页面缓存——如果是这样的话,算您走运吧

让您开始的一些资源: DHH关于俄罗斯玩偶缓存:)

缓存密钥上的Railscast:

高级缓存指南:

不是免费的,但我发现这个系列真正让我正确理解了各种形式的缓存:

是,每次都会重新计算。如果这是一个昂贵的操作,您应该为计数添加一个计数器缓存(指南:),并使用memcache之类的服务缓存查询结果

存在许多缓存策略,但对于数据库/Rails应用程序本身来说,缓存被认为是最灵活的方法。如果您的数据不经常更新(这意味着您不需要经常担心缓存过期),那么您就可以使用页面缓存——如果是这样的话,算您走运吧

让您开始的一些资源: DHH关于俄罗斯玩偶缓存:)

缓存密钥上的Railscast:

高级缓存指南:

不是免费的,但我发现这个系列真正让我正确理解了各种形式的缓存:

是,每次都会重新计算。如果这是一个昂贵的操作,您应该为计数添加一个计数器缓存(指南:),并使用memcache之类的服务缓存查询结果

存在许多缓存策略,但对于数据库/Rails应用程序本身来说,缓存被认为是最灵活的方法。如果您的数据不经常更新(这意味着您不需要经常担心缓存过期),那么您就可以使用页面缓存——如果是这样的话,算您走运吧

让您开始的一些资源: DHH关于俄罗斯玩偶缓存:)

缓存密钥上的Railscast:

高级缓存指南:

不是免费的,但我发现这个系列真正让我正确理解了各种形式的缓存:
除了@ Kelyydh所提供的资源外,还可以考虑多次调用相同的函数作为同一请求的一部分时的记忆化。但是,在处理请求之后,它不会保留它的值。

< P>除了@ Kelyydh提供的资源外,还可以考虑多次调用相同的函数作为同一请求的一部分时的记忆化。但是,在处理请求之后,它不会保留它的值。

< P>除了@ Kelyydh提供的资源外,还可以考虑多次调用相同的函数作为同一请求的一部分时的记忆化。但是,在处理请求之后,它不会保留它的值。

< P>除了@ Kelyydh提供的资源外,还可以考虑多次调用相同的函数作为同一请求的一部分时的记忆化。但是,在处理请求后,它将不会保留其值。

简短回答:是!您可能想考虑一些视图缓存或反向缓存。@ SpkErman通过“视图缓存”,您是在讨论页面上的三种方法之一吗?guides.rubyonrails.org/caching_with_rails.htmlWhat ever适合您@Kelseydh用你的不同选择写了一个很好的答案。简短的回答:是的!您可能想考虑一些视图缓存或反向缓存。@ SpkErman通过“视图缓存”,您是在讨论页面上的三种方法之一吗?guides.rubyonrails.org/caching_with_rails.htmlWhat ever适合您@Kelseydh用你的不同选择写了一个很好的答案。简短的回答:是的!您可能想考虑一些视图缓存或反向缓存。@ SpkErman通过“视图缓存”,您是在讨论页面上的三种方法之一吗?guides.rubyonrails.org/caching_with_rails.htmlWhat ever适合您@Kelseydh用你的不同选择写了一个很好的答案。简短的回答:是的!您可能想考虑一些视图缓存或反缓存。@ SpkErman通过“视图缓存”,您是在说Abou.