Ruby on rails 是否每次加载页面时都执行相关计算?
我有一个模型“包装器”,它有许多另一个模型“类别”,反过来又有许多另一个模型“东西” “Thing”具有整数属性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”有这个实例
: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.