哪个更快"计数"或"长度"?

Foo*_*Foo 2 ruby-on-rails ruby-on-rails-3

假设有2个模型叫做User和Post

哪个会更好(快)"A计划"还是"B计划"?

"计划A"

调节器

@users = User.find_all_by_country(params[:country])
@posts = Post.find_all_by_category(params[:category])
Run Code Online (Sandbox Code Playgroud)

视图

<%= @users.count.to_s %>
<%= @posts.count.to_s %>
Run Code Online (Sandbox Code Playgroud)

"B计划"

调节器

@users = User.find_all_by_country(params[:country])
@posts = Post.find_all_by_category(params[:category])
Run Code Online (Sandbox Code Playgroud)

视图

<%= @users.length.to_s %>
<%= @posts.length.to_s %>
Run Code Online (Sandbox Code Playgroud)

Ash*_*aka 14

在Ruby中,count,length和size所有做很多关于阵列同样的事情.有关详细信息,请参见此处

但是,使用ActiveRecord对象时,count优于length,size甚至更好.

find_all_by_country返回一个哑数组,所以你不应该使用该方法(因为它总是返回一个数组).相反,使用where(country: params[:country]).

我会让Code School的Rails最佳实践幻灯片93号为自己说话(希望他们不要因为我在这里复制它而生气).

在此输入图像描述

为了防止图像被删除,基本上:

  1. length 总是拉出所有记录,然后在阵列上调用.length - 糟糕

  2. count 总是做一个计数查询 - 好

  3. size 如果你有一个缓存计数器,则查看缓存,否则进行计数查询 - 最好