ActiveAdmin在开发环境下非常缓慢

3

我有一个使用ActiveAdmin gem的应用程序。 我们实际上有3个命名空间和100多个ActiveAdmin.register Model rails 5.0.7 activeadmin 2.4。

该应用在生产环境下运行得非常好,但是在开发模式下,每次代码更改时,重新加载非常缓慢。

这可能与以下方面有关: 我深入研究了一下,似乎代码会为“浏览器请求”的HTML部分重新加载一次,但随后它会针对页面请求的每个资源多次重新加载。并且它同时进行。代码一次重新加载多次,重新加载开始变得非常缓慢。

这里是我刚进行代码修改时的输出日志:

Started GET "/admin/tickets" for ::1 at 2020-04-21 11:35:23 +0200
Creating scope :customer_relations. Overwriting existing method AdminUser.customer_relations.
/Users/baptibenz/dev/backend/app/admin/lib/component.rb:3: warning: already initialized constant ActiveAdmin::CSVBuilder::DEFAULT_COLUMNS_OPTIONS
/Users/baptibenz/dev/backend/app/admin/lib/component.rb:3: warning: previous definition of DEFAULT_COLUMNS_OPTIONS was here
Processing by Admin::TicketsController#index as HTML
  AdminUser Load (4.8ms)  SELECT  "admin_users".* FROM "admin_users" WHERE "admin_users"."id" = $1 ORDER BY "admin_users"."id" ASC LIMIT $2  [["id", 1], ["LIMIT", 1]]
  Rendering /Users/baptibenz/.rvm/gems/ruby-2.4.4/gems/activeadmin-2.4.0/app/views/active_admin/resource/index.html.arb
   (2.3ms)  SELECT COUNT(count_column) FROM (SELECT  1 AS count_column FROM "tickets" LIMIT $1 OFFSET $2) subquery_for_count  [["LIMIT", 30], ["OFFSET", 0]]
  CACHE (0.0ms)  SELECT COUNT(count_column) FROM (SELECT  1 AS count_column FROM "tickets" LIMIT $1 OFFSET $2) subquery_for_count  [["LIMIT", 30], ["OFFSET", 0]]
   (2.1ms)  SELECT COUNT(*) FROM "tickets"
  CACHE (0.0ms)  SELECT COUNT(count_column) FROM (SELECT  1 AS count_column FROM "tickets" LIMIT $1 OFFSET $2) subquery_for_count  [["LIMIT", 30], ["OFFSET", 0]]
  Ticket Load (2.6ms)  SELECT  "tickets".* FROM "tickets" ORDER BY "tickets"."id" desc LIMIT $1 OFFSET $2  [["LIMIT", 30], ["OFFSET", 0]]
  Listing Load (2.9ms)  SELECT  "listings".* FROM "listings" WHERE "listings"."id" = $1 LIMIT $2  [["id", 22015], ["LIMIT", 1]]
  Team Load (2.1ms)  SELECT  "teams".* FROM "teams" WHERE "teams"."id" = $1 LIMIT $2  [["id", 1], ["LIMIT", 1]]
  TicketCategory Load (9.6ms)  SELECT  "ticket_categories".* FROM "ticket_categories" WHERE "ticket_categories"."id" = $1 LIMIT $2  [["id", 1], ["LIMIT", 1]]
  Rendered admin/tickets/_index.arb (179.4ms)
  TicketCategory Load (5.0ms)  SELECT "ticket_categories".* FROM "ticket_categories"
  Team Load (3.1ms)  SELECT "teams".* FROM "teams"
  AdminUser Load (28.2ms)  SELECT "admin_users".* FROM "admin_users"
  Rendered layouts/_analytics.erb (0.7ms)
  Rendered /Users/baptibenz/.rvm/gems/ruby-2.4.4/gems/activeadmin-2.4.0/app/views/active_admin/resource/index.html.arb (470.9ms)
Completed 200 OK in 649ms (Views: 466.9ms | ActiveRecord: 68.7ms)


   (3.1ms)  BEGIN
   (2.2ms)  COMMIT
Started GET "/assets/jquery.xdan.datetimepicker.css" for ::1 at 2020-04-21 11:35:36 +0200
Creating scope :customer_relations. Overwriting existing method AdminUser.customer_relations.
/Users/baptibenz/dev/backend/app/admin/lib/component.rb:3: warning: already initialized constant ActiveAdmin::CSVBuilder::DEFAULT_COLUMNS_OPTIONS
/Users/baptibenz/dev/backend/app/admin/lib/component.rb:3: warning: previous definition of DEFAULT_COLUMNS_OPTIONS was here
Started GET "/assets/active_admin.js" for ::1 at 2020-04-21 11:35:43 +0200
   (2.1ms)  BEGIN
   (2.0ms)  COMMIT
Creating scope :customer_relations. Overwriting existing method AdminUser.customer_relations.
/Users/baptibenz/dev/backend/app/admin/lib/component.rb:3: warning: already initialized constant ActiveAdmin::CSVBuilder::DEFAULT_COLUMNS_OPTIONS
/Users/baptibenz/dev/backend/app/admin/lib/component.rb:3: warning: previous definition of DEFAULT_COLUMNS_OPTIONS was here
Started GET "/assets/active_admin/print.css" for ::1 at 2020-04-21 11:35:54 +0200
Started GET "/assets/active_admin.css" for ::1 at 2020-04-21 11:35:54 +0200
   (3.4ms)  BEGIN
   (2.5ms)  COMMIT
Creating scope :customer_relations. Overwriting existing method AdminUser.customer_relations.
/Users/baptibenz/dev/backend/app/admin/lib/component.rb:3: warning: already initialized constant ActiveAdmin::CSVBuilder::DEFAULT_COLUMNS_OPTIONS
/Users/baptibenz/dev/backend/app/admin/lib/component.rb:3: warning: previous definition of DEFAULT_COLUMNS_OPTIONS was here
Creating scope :customer_relations. Overwriting existing method AdminUser.customer_relations.
/Users/baptibenz/dev/backend/app/admin/lib/component.rb:3: warning: already initialized constant ActiveAdmin::CSVBuilder::DEFAULT_COLUMNS_OPTIONS
/Users/baptibenz/dev/backend/app/admin/lib/component.rb:3: warning: previous definition of DEFAULT_COLUMNS_OPTIONS was here
   (2.4ms)  BEGIN
   (4.5ms)  BEGIN
   (5.2ms)  COMMIT
   (3.8ms)  COMMIT
Started GET "/assets/active_admin/orderable.png" for ::1 at 2020-04-21 11:36:35 +0200
Creating scope :customer_relations. Overwriting existing method AdminUser.customer_relations.
/Users/baptibenz/dev/backend/app/admin/lib/component.rb:3: warning: already initialized constant ActiveAdmin::CSVBuilder::DEFAULT_COLUMNS_OPTIONS
/Users/baptibenz/dev/backend/app/admin/lib/component.rb:3: warning: previous definition of DEFAULT_COLUMNS_OPTIONS was here
Started GET "/assets/active_admin/nested_menu_arrow.gif" for ::1 at 2020-04-21 11:36:56 +0200
   (3.1ms)  BEGIN
   (3.1ms)  COMMIT
Creating scope :customer_relations. Overwriting existing method AdminUser.customer_relations.
/Users/baptibenz/dev/backend/app/admin/lib/component.rb:3: warning: already initialized constant ActiveAdmin::CSVBuilder::DEFAULT_COLUMNS_OPTIONS
/Users/baptibenz/dev/backend/app/admin/lib/component.rb:3: warning: previous definition of DEFAULT_COLUMNS_OPTIONS was here
Started GET "/assets/chosen-sprite@2x.png" for ::1 at 2020-04-21 11:37:19 +0200
   (2.9ms)  BEGIN
   (2.5ms)  COMMIT
Creating scope :customer_relations. Overwriting existing method AdminUser.customer_relations.
/Users/baptibenz/dev/backend/app/admin/lib/component.rb:3: warning: already initialized constant ActiveAdmin::CSVBuilder::DEFAULT_COLUMNS_OPTIONS
/Users/baptibenz/dev/backend/app/admin/lib/component.rb:3: warning: previous definition of DEFAULT_COLUMNS_OPTIONS was here
   (2.2ms)  BEGIN
   (4.9ms)  COMMIT

正如您所看到的,它在日期方面非常慢。

如果需要更多信息,请告诉我:-)


1
从你使用 Git 浏览器开始到它加载完成,添加你的开发日志。 - matanco
@matanco 添加了 :-) - baptibenz
看起来不慢啊,这个日志是在做出更改之后的吗? - matanco
@matanco 是的,这是在进行更改后:在第一次调用“GET”“/admin/tickets”(2020-04-21 11:35:23)和最后一次调用之间(每个调用都会触发应用程序重新加载):“GET”“/assets/chosen-sprite@2x.png”(2020-04-21 11:37:19)。我等了约2分钟才等到页面加载完成。 - baptibenz
你能展示给我这个作用域:AdminUser.customer_relations,并告诉我在你的开发环境中该表的大小吗? - matanco
作用域非常简单:scope :customer_relations, -> { where(team: CUSTOMER_RELATIONS) },表格大约有100行。我认为问题不在于这个作用域很慢,而是整个代码库被多次重新加载了,不是吗? - baptibenz
1个回答

1

看起来你遇到了ActiveAdmin#5787的问题。简单来说,这个问题在Rails 5.2和ActiveAdmin 2.6中已经解决了。


另外,顺便说一下,在大型商店中我看到的一个策略是使用环境变量来有选择地仅在开发中注册资源的子集。 - Piers C

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接