ruby-on-rails 慢速活动目录管理索引页

ybzsozfc  于 2022-11-19  发布在  Ruby
关注(0)|答案(3)|浏览(89)

我有Rails 5和active admin gem。在开发过程中,我看到了很多用rail s运行的查询。它们中的大多数都是CACHE(0.0ms)类型。最后几秒钟后,它显示:

Rendered /home/blabla/.rvm/gems/ruby-2.2.5@test/gems/activeadmin-1.0.0.pre4/app/views/active_admin/resource/index.html.arb (10588.9ms)
Completed 200 OK in 10646ms (Views: 10338.2ms | ActiveRecord: 264.1ms)

是渲染视图时间的问题吗?在索引视图中我显示了很多关于一些模型及其关联的信息。我还添加了scoped_collection方法,其中包含了一些用于快速加载的include,但它是一样的,太慢了....我感谢任何帮助...
谢谢你,谢谢你

z0qdvdin

z0qdvdin1#

CACHE就可以了。这意味着ActiveRecord已经有了数据,不需要进行DB调用。
为了诊断这个问题,我推荐使用bullet gem,它将为您突出显示由于缺少include而导致的查询速度缓慢。为了真正深入了解性能,您可以尝试使用rack mini-profiler gemflamegraph扩展。我已经成功地使用这些扩展诊断了导致查询速度缓慢的问题。通常这是一个N+1问题。而且开发版本会在每次编辑时重新编译所有CSS。
使用includes来加速ActiveAdmin非常简单:

controller do
  def scoped_collection
    super.includes(:bill_address)
  end
end

请注意,生产中的渲染不包括动态编译资源,因此这在开发中可能很重要,但实际上不是问题。

tzxcd3kk

tzxcd3kk2#

如果您的模型使用has_many :through关联来设置多对多连接,则关联模型的记录数量会很大,由于过滤器的原因,速度会很慢。

class Physician < ApplicationRecord
  has_many :appointments
  has_many :patients, through: :appointments
end

class Appointment < ApplicationRecord
  belongs_to :physician
  belongs_to :patient
end

class Patient < ApplicationRecord
  has_many :appointments
  has_many :physicians, through: :appointments
end

https://guides.rubyonrails.org/association_basics.html#the-has-many-through-association
如果患者索引缓慢,最好添加以下描述。

preserve_default_filters!
remove_filter :physicians

https://activeadmin.info/3-index-pages.html

gr8qqesn

gr8qqesn3#

这可能是由于筛选器的原因。您可以指定要包含的筛选器,否则模型上的所有属性都将作为筛选器添加。https://github.com/activeadmin/activeadmin/blob/master/docs/3-index-pages.md

相关问题