2016-02-13 2 views
1

Je dois rendre environ 2500 catégories (y compris les catégories imbriquées - en utilisant la gemance d'ancêtre) et les produits comptent dans chacune de ces catégories.Temps de réponse faible lors du comptage des produits dans les catégories

Quelque chose comme ce qui suit:

enter image description here

Il faut beaucoup de temps pour charger la page en raison de cela. J'itérer 5 listes (5 catégories de niveau en profondeur) et utiliser le code suivant pour compter les produits dans une catégorie (il somme toujours les produits de la catégorie actuelle et aussi tous ceux imbriqués):

<%= Product.includes(:category).where(:id => @filter_product_ids, categories: {:id => Category.find(root['id']).subtree_ids }).count %> 

Y at-il manière comment accélérer cela? À l'heure actuelle, je n'utilise que 200 catégories et 10 000 produits (500 000 attendus) et il faut 30 secondes pour charger la page avec seulement 10 000 produits.

Merci, Miroslav

SOLUTION

compteur de cache: https://github.com/magnusvk/counter_culture

Répondre

0

Vous devez regarder le SQL qui est en cours d'exécution contre la base de données et créer des index pour les colonnes. Il semble que vous effectuez des analyses de table sur la table des produits; un index accélérera considérablement les choses.

+0

Merci Andy. En fait, j'ai regardé dans la console et vu beaucoup de requêtes SQL, donc je cherchais un moyen de le réduire et heureusement pour mes fins, j'ai trouvé une bonne solution gem counter counter (https://github.com/magnusvk/counter_culture). Maintenant, il fonctionne beaucoup plus vite. – Miroslav

+0

Caching est certainement une bonne idée aussi; Lorsque vous devez réellement faire la requête SQL, les index appropriés augmenteront également les performances. –