1

j'ai un modèle User.rb qui comprend la ligne:runs acts_as_taggable requêtes sur chaque demande

acts_as_taggable_on :industries, :uxes 

[Le terme « ux » contient les préférences UX appartenant à l'utilisateur, comme s'ils ont rejeté une certaine boîte d'aide. ]

Ce que j'ai remarqué est les requêtes suivantes se chargent en haut de chaque demande impliquant un @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') 

Ces requêtes sont Ding temps à chaque pageload sur lequel un utilisateur est chargé (c.-à-d. 90% + de tous les pageloads). Pourquoi acts_as_taggable forcer ces requêtes à se produire, et comment puis-je l'empêcher de les charger à moins que nécessaire?

Répondre

2

Le bijou ActsAsTaggableOn soutient prétendument caching your tag lists directement dans votre modèle, vous pouvez aussi consulter ce question. Pour activer la mise en cache des listes de balises, ajoutez simplement une colonne cached_tag_list à votre table, car les méthodes de mise en cache recherchent une colonne appelée "cache _ # {contexte} _list" dans la table d'enregistrements acts_as_taggable. Je ne sais pas si cela fonctionne, cependant.

Questions connexes