我的应用程序可能陷入困境。有人可以帮助我优化此控制器代码以使其运行得更快吗?或指出正确的方向。谢谢。
if current_user.manager?
get_customers = Customer.where(:archived => false)
@cc = get_customers.where(:active => true)
@current_customers = @cc.where(:user_id => current_user.id)
@count_current = @current_customers.count
@pc = get_customers.where(:active => false)
@potential_customers = @pc.where(:user_id => current_user.id)
@count_potential = @potential_customers.count
end
在单个查询中加载所有可用记录可能会非常昂贵。而且,用户可能只对最近的几个记录(即博客中的最新帖子)感兴趣,而不想等待所有记录的加载和呈现。
有几种方法可以解决此问题
Load More的示例#1实现
Infinite Scrolling的示例#2实现
pagination的示例#3实现
您可能会找到帮助here
正如@Gabbar指出的那样,我将添加到它中,您的应用现在是eager-loading(与[[lazy-loading相反)),这意味着您正在从数据库中加载比所需更多的东西。我们需要做的是优化,但这完全取决于您的用例。
无论用例如何,您都可以做一些普通的事情来使事情变得更好:您可以实现分页(有很多功能,您也可以自己做)或无限滚动。在这种情况下,您将首先从db加载一定数量的记录,但一旦用户需要更多记录,它们将向下滚动或单击“下一步”按钮,并且将再次调用您的操作,但页面会增加数字,表示获取下一组记录。基于滚动的实现涉及JS和视图高度等,但是分页要简单得多。
宝石:
kaminari gem使用includes
@@ users = User.all.includes(:comments)#与用户一起带来但已保存在RAM中以供将来访问的所有用户的注释。@comments = @ users.map(&:comments)#无需再次进入db,只需进入RAM。