【问题标题】:Speeding Up Rails App With Large Tables使用大表加速 Rails 应用程序
【发布时间】:2015-12-15 09:21:28
【问题描述】:

我构建了一个 Rails 应用程序来跟踪我公司的手机库存。我们现在有 1,426 个库存对象。当我在 Heroku 托管的应用程序上打开库存索引页面(所有已创建库存的表格)时,该页面需要 10 多秒才能加载。

我正在研究片段缓存,在所有适用的关联键上添加索引,并试图弄清楚如何对结果进行分页。

加快页面加载速度的最佳方法是什么?

【问题讨论】:

  • 你在使用 jquery-rails-datatables 吗? github.com/rweng/jquery-datatables-rails
  • 你的问题不是表很大:1426条记录不是很大。您的问题是您在您的网页上显示所有记录的数据。您只需要在任何时候显示记录的子集,例如分页,请参阅下面的答案。
  • 谢谢大家,我正在使用 jquery-rails-datatables。我应该提到我也在使用他们的分页功能,尽管我不确定这会限制页面加载时实际呈现的行数。

标签: ruby-on-rails heroku datatables


【解决方案1】:

您可以使用分页,通过分页可以限制每页的库存对象数量。

Will paginate 是用于解决此问题的 Rails 的宝石,可在以下位置找到: https://github.com/mislav/will_paginate

【讨论】:

    【解决方案2】:

    通用answer 用于通用问题!

    【讨论】:

    • 感谢 Dusht,这看起来是一个非常有用的资源!
    【解决方案3】:

    可能发生的一件事是您有 N+1 个查询,请安装子弹 gem。该 gem 基本上会在开发模式下提醒您正在执行的所有 N+1 查询。

    如果你不知道 N+1 查询什么:

    假设你的控制器中有这个:

    def show 
      @user = User.find(params[:id])
    end
    

    假设用户有相关的手机型号,所以在您看来,您可以执行以下操作:

    = @user.cellphones.last.number
    

    这将生成一个查询以查找手机,并且对于您拥有的每件东西也都会这样做。 因此,要解决此问题,您可以执行以下操作:

    def show
      @user = User.includes(:cellphone).find(params[:id]) 
    end
    

    这基本上会让用户和手机都看到这个视图。 这可能无法解决您的问题,但至少会有所帮助。

    【讨论】:

    • 感谢 alebian。我不认为我有 N+1,因为我的查询是 @inventories = Inventory.order('id DESC')。但我只是查看了开发日志,由于我在视图中提取了一些数据,它看起来确实如此。正在努力!
    【解决方案4】:

    感谢大家的回答,对于这个笼统的问题,我深表歉意。

    这肯定是一个 N+1 问题,可以通过使用 .includes() 进行预加载来解决。我查看了开发日志并注意到了查询塔。在对我的视图表中显示的关联模型数据使用两个 .includes() 后,页面加载时间缩短到 ~1.7 秒。

    再次感谢! 布伦南

    【讨论】:

      猜你喜欢
      • 2011-04-09
      • 2013-08-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多