1

User.rbの行を含むモデルがあります。

acts_as_taggable_on :industries, :uxes

[「uxes」という用語には、ユーザーが特定のヘルプ ボックスを閉じたかどうかなど、ユーザーに属する UX 設定が含まれます。]

私が気付いたのは、次のクエリが、を含むすべてのリクエストの先頭にロードされていることです@user

User Load (1.4ms)  SELECT `users`.* FROM `users` WHERE `users`.`id` = 354 LIMIT 1
ActsAsTaggableOn::Tag Load (0.4ms)  SELECT `tags`.* FROM `tags` INNER JOIN `taggings` ON `tags`.id = `taggings`.tag_id WHERE ((`taggings`.taggable_id = 354) AND (`taggings`.taggable_type = 'User')) AND (taggings.context = 'uxes' AND taggings.tagger_id IS NULL)  
AREL (0.3ms)  UPDATE `users` SET `last_request_at` = '2012-09-17 09:44:24', `perishable_token` = 'un5eK7SHDNzTegt7GPUk', `updated_at` = '2012-09-17 09:44:24' WHERE `users`.`id` = 354
ActsAsTaggableOn::Tag Load (0.3ms)  SELECT `tags`.* FROM `tags` INNER JOIN `taggings` ON `tags`.id = `taggings`.tag_id WHERE ((`taggings`.taggable_id = 354) AND (`taggings`.taggable_type = 'User')) AND (taggings.context = 'uxes' AND taggings.tagger_id IS NULL)
ActsAsTaggableOn::Tagging Load (0.4ms)  SELECT `taggings`.* FROM `taggings` WHERE `taggings`.`tagger_type` IS NULL AND `taggings`.`tagger_id` IS NULL AND `taggings`.`context` = 'uxes' AND `taggings`.`tag_id` IN (NULL) AND (`taggings`.taggable_id = 354 AND `taggings`.taggable_type = 'User')

これらのクエリは、ユーザーが読み込まれるすべてのページ読み込みに時間を追加しています (つまり、すべてのページ読み込みの 90% 以上)。これらのクエリが強制的に発生するのはなぜacts_as_taggableですか? また、必要でない限り、クエリの読み込みを停止するにはどうすればよいですか?

4

1 に答える 1

2

この ActsAsTaggableOn宝石は、タグリストをモデルに直接キャッシュすることをサポートしているとされています。この質問も参照してください。タグ リストのキャッシュを有効にするには、テーブルに列を追加するだけです。キャッシュ メソッドは、 acts_as_taggableレコード テーブルcached_tag_listで「cached_#{context}_list」という列を探すためです。ただし、これが機能するかどうかはわかりません。

于 2012-09-18T08:43:27.490 に答える