我听说了记忆的好处,但我不确定它是如何工作的。例如,在:
class User < ActiveRecord::Base
def twitter_followers
# assuming twitter_user.followers makes a network call
@twitter_followers ||= twitter_user.followers
end
end
据我所知,@twitter_followers
是一个实例变量,只会保留在一个请求的范围内(以便视图可以访问它。)
我不确定相同的用户是否刷新同一页面,是否会使用缓存的结果而不是触发查询。
答案 0 :(得分:3)
您可以在不同的地方拥有User
个实例和user.twitter_followers
个来电。
如果没有记忆,则每次调用twitter_user.followers
都会产生新的user.twitter_followers
请求,而memoization只会执行一个请求,并且每个后续调用都将使用set @twitter_followers
变量。
所以我不确定同一个用户是否会再次刷新同一页面 它使用缓存的结果而不是触发查询?
通过页面刷新,它将成为新请求。
在视图中,可以使用memoization的优势,正如我的回答所暗示的,例如,如果在此单个页面中,您不止一次引用user.twitter_followers
。
在模特/服务/工人/任何其他与后端相关的地方进行记忆确实有所作为。
答案 1 :(得分:1)
首先它将触发查询,它作为User模型实例的实例变量存储在内存中。用户模型的实例将始终按请求重新加载。