Jump to content

Page catégorie extrêmement lente


Recommended Posts

Bonjour,

 

J'ai quelques soucis avec Prestashop 1.5.6.0, ma boutique contient des milliers de déclinaisons, le maximum de déclinaisons par produit est environ de 6000.

 

J'ai réécris mes pages produits afin de charger via Ajax par un module développé les combinaisons, car de base dans prestashop, tout était chargé avec la page et cela était beaucoup trop long et lourd.

 

Voilà pour le "cadre" de l'installation, mon problème maintenant, se situe sur les pages Catégories.

 

En effet, celles-ci mettent énormément de temps à se charger, plus j'ai de déclinaisons en gros sur mes produits affichés sur la catégorie en cours, plus c'est long.

 

J'ai reperé en partie d'ou venait le temps si long, à priori il s'agit de la requête composée dans la classe Category, la méthode getProducts()

 

A priori se seraient les LEFT JOIN qui prennent un temps fou mais je ne vois pas trop comment optimiser tout ça...

 

Ci-dessous la requête executée :

 

SELECT
p.*, product_shop.*, stock.out_of_stock,
IFNULL(stock.quantity, 0) AS quantity,
MAX(
product_attribute_shop.id_product_attribute
) id_product_attribute,
product_attribute_shop.minimal_quantity AS product_attribute_minimal_quantity,
pl.`description`,
pl.`description_short`,
pl.`available_now`,
pl.`available_later`,
pl.`link_rewrite`,
pl.`meta_description`,
pl.`meta_keywords`,
pl.`meta_title`,
pl.`name`,
MAX(image_shop.`id_image`) id_image,
il.`legend`,
m.`name` AS manufacturer_name,
cl.`name` AS category_default,
DATEDIFF(
product_shop.`date_add`,
DATE_SUB(NOW(), INTERVAL 0 DAY)
) > 0 AS new,
product_shop.price AS orderprice
FROM
`ps_category_product` cp
LEFT JOIN `ps_product` p ON p.`id_product` = cp.`id_product`
INNER JOIN ps_product_shop product_shop ON (
product_shop.id_product = p.id_product
AND product_shop.id_shop = 1
)
LEFT JOIN `ps_product_attribute` pa ON (
p.`id_product` = pa.`id_product`
)
LEFT JOIN ps_product_attribute_shop product_attribute_shop ON (
product_attribute_shop.id_product_attribute = pa.id_product_attribute
AND product_attribute_shop.id_shop = 1
AND product_attribute_shop.`default_on` = 1
)
LEFT JOIN ps_stock_available stock ON (
stock.id_product = p.id_product
AND stock.id_product_attribute = IFNULL(
`product_attribute_shop`.id_product_attribute,
0
)
AND stock.id_shop = 1
)
LEFT JOIN `ps_category_lang` cl ON (
product_shop.`id_category_default` = cl.`id_category`
AND cl.`id_lang` = 1
AND cl.id_shop = 1
)
LEFT JOIN `ps_product_lang` pl ON (
p.`id_product` = pl.`id_product`
AND pl.`id_lang` = 1
AND pl.id_shop = 1
)
LEFT JOIN `ps_image` i ON (
i.`id_product` = p.`id_product`
)
LEFT JOIN ps_image_shop image_shop ON (
image_shop.id_image = i.id_image
AND image_shop.id_shop = 1
AND image_shop.cover = 1
)
LEFT JOIN `ps_image_lang` il ON (
image_shop.`id_image` = il.`id_image`
AND il.`id_lang` = 1
)
LEFT JOIN `ps_manufacturer` m ON m.`id_manufacturer` = p.`id_manufacturer`
WHERE
product_shop.`id_shop` = 1
AND cp.`id_category` = 10
AND product_shop.`active` = 1
AND product_shop.`visibility` IN ("both", "catalog")
GROUP BY
product_shop.id_product
ORDER BY
cp.`position` ASC
LIMIT 0,
 20

Celle-ci met environ 8 secondes à s’exécuter, ce qui est plutôt énorme !

 

Au delà de ce temps de réponse déja très long, j'ai comme l'impression que l'ensemble des combinaisons sont chargés quelque part en mémoire après l'execution de cette requete, en effet, j'ai du augmenter la mémoire maximale autorisée par php.

 

Mon processus PHP monte environ a 500M lors du chargement d'une page catégorie.

 

Help !!

 

Merci d'avance !

 

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...