active_admin resource / index.html.arb缓慢

时间:2011-11-10 21:56:41

标签: ruby ruby-on-rails-3 activeadmin

使用active_admin,我看到加载具有许多记录的模型的索引的速度很慢。我不确定这与其他报道的缓慢病例有关。

2011-11-10 13:26:14 rails[35848]  INFO: Started GET "/admin/articles" for 127.0.0.1 at Thu Nov 10 13:26:14 -0800 2011
2011-11-10 13:26:14 rails[35848]  INFO: Processing by Admin::ArticlesController#index as HTML
2011-11-10 13:26:14 rails[35848]  DEBUG: AdminUser Load (0.3ms)  SELECT "admin_users".* FROM "admin_users" WHERE "admin_users"."id" = 1 LIMIT 1
2011-11-10 13:26:14 rails[35848]  DEBUG: Article Load (381.2ms)  SELECT "articles".* FROM "articles" ORDER BY publish_date desc, guid desc, "articles".id desc LIMIT 30 OFFSET 0
2011-11-10 13:26:14 rails[35848]  DEBUG: SQL (0.5ms)  SELECT COUNT(*) FROM "articles"
2011-11-10 13:26:14 rails[35848]  DEBUG: CACHE (0.0ms)  SELECT COUNT(*) FROM "articles"
2011-11-10 13:26:14 rails[35848]  DEBUG: CACHE (0.0ms)  SELECT COUNT(*) FROM "articles"
2011-11-10 13:26:21 rails[35848]  DEBUG: PendingArticle Load (6602.8ms)  SELECT "pending_articles".* FROM "pending_articles" ORDER BY created_at desc
2011-11-10 13:26:41 rails[35848]  DEBUG: Domain Load (1.0ms)  SELECT "domains".* FROM "domains"
2011-11-10 13:26:41 rails[35848]  INFO: Rendered /Users/sorens/.rvm/gems/ruby-1.8.7-p299@rails3/gems/activeadmin-0.3.4/app/views/active_admin/resource/index.html.arb (27605.5ms)
2011-11-10 13:26:41 rails[35848]  INFO: Completed 200 OK in 27645ms (Views: 20629.0ms | ActiveRecord: 6985.8ms)

这是对/admin/articles的请求。我的文章模型有一个belongs_to :pending_article。 pending_article有has_one :article, :autosave => true

我有几个问题

(1)我可以阻止这个额外的查询吗?我没有从文章的索引视图访问任何pending_article中的任何字段。似乎文章查询是通过分页正确确定范围的,但对pending_article的后续查询似乎抓住了它们。

(2)如果只显示30条记录,为什么index.html.arb的渲染需要27秒以上?

我使用的是Ruby 1.8.7-p299,Rails 3.0.5和active_admin 0.3.4。上面的输出来自我的开发环境(在Heroku上需要更长的时间)。在上面的例子中,我有10,708篇文章和17,648个pending_articles。

1 个答案:

答案 0 :(得分:5)

默认情况下,表单包含每个属性的过滤器,这意味着它正在尝试为所有待处理文章创建一个漂亮的弹出窗口。不要只使用默认值,而是尝试使用以下命令定义过滤器列表:

ActiveAdmin.register Article do
  filter :title
end

请务必跳过pending_articles。这应该可以防止它加载所有这些记录。