我正在使用Ruby on Rails 3.0.7,我想知道使用User.all
方法有什么优点和缺点(与性能有关),然后对每个需要的请求执行查找结果的方法使用User.find(<id>)
单独检索每条记录。
我问这个是因为在我的 view 文件中我有这样的东西:
accounts.each { |account|
puts account.user.name
}
更新
例如,Stackoverflow网站如何处理有关finder方法的标签?
答案 0 :(得分:2)
除非您确定数据集非常小,最多只能输入数十个记录,否则不要获取任何内容all
。获取所有用户是一种灾难,因为此操作的内存使用量将随着系统上的用户数量线性增加。
在大多数情况下检索子集时,必须使用find
或where
方法,除非您可以绝对确定所涉及的记录数量是微不足道的。< / p>
我甚至提倡使用select_values
或select_rows
,只需要一点点数据,而不需要模型的开销,这对大型表格列表很有用。
请记住,在加载模型时,默认情况下会加载与其关联的所有内容。对于用户而言,这可能包括他们的扩展传记,他们的地址,他们喜欢的颜色,他们的电子邮件,他们的密码,所有你使用的是他们的名字,然后扔掉这个对象。如果需要考虑性能,则仅获取所需内容。
在控制器中安装以下内容几乎总是错误的:
@users = Users.all
您需要做的是分页,或者当更多用户注册您的系统时,该页面会逐渐变慢。在某些时候,页面将永远不会正确呈现,因为它将首先超时。