2011-11-10 8 views
1

active_adminを使用して、多くのレコードを持つモデルのインデックスの読み込み速度が低下しています。私はこれが他の報告された遅さの症例に関連しているとは確信していません。active_admin resource/index.html.arb slowness

 
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/[email protected]/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)index.html.arbのレンダリングは、30レコードしか表示しないと、なぜ27秒以上かかるのですか?

Ruby 1.8.7-p299、Rails 3.0.5、active_admin 0.3.4を使用しています。上記の出力は私の開発環境からのものです(それはHerokuでもっと長い時間がかかります)。上の例では、10,708件の記事と17,648件のpending_articlesがありました。

答えて

5

デフォルトでは、フォームには各属性のフィルタが含まれています。つまり、保留中のすべての記事に対してすばらしいポップアップを作成しようとしています。デフォルトを使用する代わりに、フィルタリストを次のように定義してください:

ActiveAdmin.register Article do 
    filter :title 
end 

そして、pending_articlesをスキップしてください。これにより、それらのレコードをすべて読み込まないようにする必要があります。

+0

brilliant!ありがとう。 – sorens

関連する問題