Jump to content

lenteur site web


Recommended Posts

Bonjour,

j'ai une boutique prestashop 1.7.7.0 avec php 7.2.

Depuis une changement de theme nous constatons un ralentissement du site.

L'hébergeur est au max de ces compétences et jamais de souci avec d'autre prestashop sur le même type d'hebergement.

L'hébergeur nous indique trop de connexion de requête envoyé par le thème donc désinstaller des modules mais comment définir les modules qu'on utilise pas qui pourraient être désinstallé et voir ceux qui prennent le plus de connexion de requête inutile ? 

MERCI pour vos sugestion.

Link to comment
Share on other sites

Le mode debug est active voici juste une erreur en accueil pour le moment :

Notice à la ligne 101 du fichier /xxxxxxx/vendor/symfony/symfony/src/Symfony/Component/HttpFoundation/Session/Storage/Handler/StrictSessionHandler.php
[8] SessionHandler::gc(): ps_files_cleanup_dir: opendir(/tmp/.priv) failed: Permission denied (13)

Link to comment
Share on other sites

les infos de la barre debug :

 

Peak memory usage60.5 MB

PHP memory limitUnlimited

Errors0

Warnings33

Deprecations3

Cache Calls29

Total time1.54 ms

Cache hits22 / 27 (81.48%)

Cache writes2

Database Queries3

Query time1.25 ms

Invalid entities0

Second Level Cachedisabled

Total time470 ms

Initialization time111 ms

Link to comment
Share on other sites

Just now, kate66 said:

A OK je fais ce qui indiquer dans le lien JE REVIENS de suite MERCI encore

par contre y a des petit changement a faire vu que l'article est pour le mode debug et non pas pour le mode debug profiling, par contre c'est le même principe, merci @Mediacom87

Link to comment
Share on other sites

à l’instant, Alexandre Carette a dit :

par contre y a des petit changement a faire vu que l'article est pour le mode debug et non pas pour le mode debug profiling, par contre c'est le même principe, merci @Mediacom87

Comme je disais, c'ets pour aider dans l'idée mais à adapter pour l'appliquer au profiling.

Link to comment
Share on other sites

SELECT SQL_NO_CACHE * FROM `ps_product` a LEFT JOIN `ps_product_lang` `b` ON a.`id_product` = b.`id_product` AND b.`id_lang` = 1 LEFT JOIN `ps_product_shop` `c` ON a.`id_product` = c.`id_product` AND c.`id_shop` = 1 WHERE (a.`id_product` = 2474) AND (b.`id_shop` = 1) LIMIT 1

1980.31/src/Adapter/EntityMapper.php:75

SELECT SQL_NO_CACHE image_shop.`id_image` FROM `ps_image` i INNER JOIN ps_image_shop image_shop ON (image_shop.id_image = i.id_image AND image_shop.id_shop = 1) WHERE i.`id_product` = 2112 AND image_shop.`cover` = 1 LIMIT 1

19745/classes/Product.php:3118

SELECT SQL_NO_CACHE bgm.*, s.`name` , bgml.`content` FROM ps_bongooglemap bgm LEFT JOIN ps_store_lang s ON(bgm.`id_store` = s.`id_store`) LEFT JOIN ps_bongooglemap_lang bgml ON(bgm.`id_tab` = bgml.`id_tab`) WHERE bgm.`id_shop` = 1 AND bgm.`id_shop` = 1 AND bgml.`id_lang` = 1 AND s.`id_lang` = 1 AND bgm.`status` = 1 ORDER BY bgm.`id_tab`

19131Yes/modules/bongooglemap/classes/ClassGooglemap.php:106

SELECT SQL_NO_CACHE p.*, product_shop.*, stock.out_of_stock, IFNULL(stock.quantity, 0) AS quantity, IFNULL(product_attribute_shop.id_product_attribute, 0) AS 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`, image_shop.`id_image` id_image, il.`legend` as legend, m.`name` AS manufacturer_name, cl.`name` AS category_default, DATEDIFF(product_shop.`date_add`, DATE_SUB("2021-04-21 00:00:00", INTERVAL 65 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_shop` product_attribute_shop ON (p.`id_product` = product_attribute_shop.`id_product` AND product_attribute_shop.`default_on` = 1 AND product_attribute_shop.id_shop=1) LEFT JOIN ps_stock_available stock ON (stock.id_product = `p`.id_product AND stock.id_product_attribute = 0 AND stock.id_shop = 1 AND stock.id_shop_group = 0 ) 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_shop` image_shop ON (image_shop.`id_product` = p.`id_product` AND image_shop.cover=1 AND image_shop.id_shop=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` = 2 AND product_shop.`active` = 1 AND product_shop.`visibility` IN ("both", "catalog") ORDER BY RAND() LIMIT 12

1904.43376Yes/classes/Category.php:1056

SELECT SQL_NO_CACHE cp.`id_product_attribute`, cp.`id_product`, cp.`quantity` AS cart_quantity, cp.id_shop, cp.`id_customization`, pl.`name`, p.`is_virtual`, pl.`description_short`, pl.`available_now`, pl.`available_later`, product_shop.`id_category_default`, p.`id_supplier`, p.`id_manufacturer`, m.`name` AS manufacturer_name, product_shop.`on_sale`, product_shop.`ecotax`, product_shop.`additional_shipping_cost`, product_shop.`available_for_order`, product_shop.`show_price`, product_shop.`price`, product_shop.`active`, product_shop.`unity`, product_shop.`unit_price_ratio`, stock.`quantity` AS quantity_available, p.`width`, p.`height`, p.`depth`, stock.`out_of_stock`, p.`weight`, p.`available_date`, p.`date_add`, p.`date_upd`, IFNULL(stock.quantity, 0) as quantity, pl.`link_rewrite`, cl.`link_rewrite` AS category, CONCAT(LPAD(cp.`id_product`, 10, 0), LPAD(IFNULL(cp.`id_product_attribute`, 0), 10, 0), IFNULL(cp.`id_address_delivery`, 0), IFNULL(cp.`id_customization`, 0)) AS unique_id, cp.id_address_delivery, product_shop.advanced_stock_management, ps.product_supplier_reference supplier_reference, cu.`id_customization`, cu.`quantity` AS customization_quantity, product_attribute_shop.`price` AS price_attribute, product_attribute_shop.`ecotax` AS ecotax_attr, IF (IFNULL(pa.`reference`, '') = '', p.`reference`, pa.`reference`) AS reference, (p.`weight`+ pa.`weight`) weight_attribute, IF (IFNULL(pa.`ean13`, '') = '', p.`ean13`, pa.`ean13`) AS ean13, IF (IFNULL(pa.`isbn`, '') = '', p.`isbn`, pa.`isbn`) AS isbn, IF (IFNULL(pa.`upc`, '') = '', p.`upc`, pa.`upc`) AS upc, IF (IFNULL(pa.`mpn`, '') = '', p.`mpn`, pa.`mpn`) AS mpn, IFNULL(product_attribute_shop.`minimal_quantity`, product_shop.`minimal_quantity`) as minimal_quantity, IF(product_attribute_shop.wholesale_price > 0, product_attribute_shop.wholesale_price, product_shop.`wholesale_price`) wholesale_price , image_shop.`id_image` id_image, il.`legend` FROM `ps_cart_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_shop` = cp.`id_shop` AND product_shop.`id_product` = p.`id_product`) LEFT JOIN `ps_product_lang` `pl` ON p.`id_product` = pl.`id_product` AND pl.`id_lang` = 1 AND pl.id_shop = cp.id_shop LEFT JOIN `ps_category_lang` `cl` ON product_shop.`id_category_default` = cl.`id_category` AND cl.`id_lang` = 1 AND cl.id_shop = cp.id_shop LEFT JOIN `ps_product_supplier` `ps` ON ps.`id_product` = cp.`id_product` AND ps.`id_product_attribute` = cp.`id_product_attribute` AND ps.`id_supplier` = p.`id_supplier` LEFT JOIN `ps_manufacturer` `m` ON m.`id_manufacturer` = p.`id_manufacturer` LEFT JOIN ps_stock_available stock ON (stock.id_product = `cp`.id_product AND stock.id_product_attribute = IFNULL(`cp`.id_product_attribute, 0) AND stock.id_shop = 1 AND stock.id_shop_group = 0 ) LEFT JOIN `ps_customization` `cu` ON p.`id_product` = cu.`id_product` AND cp.`id_product_attribute` = cu.`id_product_attribute` AND cp.`id_customization` = cu.`id_customization` AND cu.`id_cart` = 25099 LEFT JOIN `ps_product_attribute` `pa` ON pa.`id_product_attribute` = cp.`id_product_attribute` LEFT JOIN `ps_product_attribute_shop` `product_attribute_shop` ON (product_attribute_shop.`id_shop` = cp.`id_shop` AND product_attribute_shop.`id_product_attribute` = pa.`id_product_attribute`) LEFT JOIN `ps_image_shop` `image_shop` ON image_shop.`id_product` = p.`id_product` AND image_shop.cover=1 AND image_shop.id_shop=1 LEFT JOIN `ps_image_lang` `il` ON il.`id_image` = image_shop.`id_image` AND il.`id_lang` = 1 WHERE (cp.`id_cart` = 25099) AND (p.`id_product` IS NOT NULL) GROUP BY cp.`id_product_attribute`, cp.`id_product`, cp.`id_shop`, cp.`id_customization` ORDER BY cp.`date_add`, cp.`id_product`, cp.`id_product_attribute` ASC

1719.924YesYes/classes/Cart.php:760

SELECT SQL_NO_CACHE cr.* FROM ps_cart_rule cr LEFT JOIN ps_cart_rule_shop crs ON cr.id_cart_rule = crs.id_cart_rule LEFT JOIN ps_cart_rule_carrier crca ON cr.id_cart_rule = crca.id_cart_rule LEFT JOIN ps_carrier c ON (c.id_reference = crca.id_carrier AND c.deleted = 0) LEFT JOIN ps_cart_rule_country crco ON cr.id_cart_rule = crco.id_cart_rule WHERE cr.active = 1 AND cr.code = "" AND cr.quantity > 0 AND NOW() BETWEEN cr.date_from AND cr.date_to AND ( cr.id_customer = 0 OR cr.id_customer = 2 ) AND ( cr.`carrier_restriction` = 0 OR c.id_carrier = 15 ) AND ( cr.`shop_restriction` = 0 ) AND ( cr.`group_restriction` = 0 OR EXISTS ( SELECT 1 FROM `ps_customer_group` cg INNER JOIN `ps_cart_rule_group` crg ON cg.id_group = crg.id_group WHERE cr.`id_cart_rule` = crg.`id_cart_rule` AND cg.`id_customer` = 2 LIMIT 1 ) ) AND ( cr.`reduction_product` <= 0 OR EXISTS ( SELECT 1 FROM `ps_cart_product` WHERE `ps_cart_product`.`id_product` = cr.`reduction_product` AND `id_cart` = 25099 ) ) AND NOT EXISTS (SELECT 1 FROM ps_cart_cart_rule WHERE cr.id_cart_rule = ps_cart_cart_rule.id_cart_rule AND id_cart = 25099) ORDER BY priority

1703.4148Yes/classes/CartRule.php:1629

SELECT SQL_NO_CACHE COUNT(DISTINCT `id_product`) FROM `ps_specific_price` WHERE `id_product` != 0 LIMIT 1

1693.8598/classes/SpecificPrice.php:286

SELECT SQL_NO_CACHE pa.`available_date` FROM `ps_product` p LEFT JOIN `ps_product_attribute` pa ON (pa.`id_product` = p.`id_product`) INNER JOIN ps_product_shop product_shop ON (product_shop.id_product = p.id_product AND product_shop.id_shop = 1) INNER 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) WHERE p.`id_product` = 1644 AND pa.`id_product` = 1644 AND pa.`id_product_attribute` = 5672 LIMIT 1

1629.81/classes/Product.php:949

SELECT SQL_NO_CACHE product_shop.`price`, product_shop.`ecotax`, IFNULL(product_attribute_shop.id_product_attribute,0) id_product_attribute, product_attribute_shop.`price` AS attribute_price, product_attribute_shop.default_on FROM `ps_product` p 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_shop` `product_attribute_shop` ON (product_attribute_shop.id_product = p.id_product AND product_attribute_shop.id_shop = 1) WHERE (p.`id_product` = 2410)

16129/classes/Product.php:3401

SELECT SQL_NO_CACHE m.`id_module`, m.`name`, ms.`id_module`as `mshop` FROM `ps_module` m LEFT JOIN `ps_module_shop` ms ON m.`id_module` = ms.`id_module` AND ms.`id_shop` = 1

1611.2118/classes/module/Module.php:322

SELECT SQL_NO_CACHE image_shop.`cover`, i.`id_image`, il.`legend`, i.`position` FROM `ps_image` i INNER JOIN ps_image_shop image_shop ON (image_shop.id_image = i.id_image AND image_shop.id_shop = 1) LEFT JOIN `ps_image_lang` il ON (i.`id_image` = il.`id_image` AND il.`id_lang` = 1) WHERE i.`id_product` = 2457 ORDER BY `position`

Link to comment
Share on other sites

Personnellement je ne trouve pas du tout votre site lent.

Mais en le testant on découvre le chargement de 12 fonts différentes,

plus de 50 images produits

Du code js et css placé au milieu du code alors qu'il devrait être dans des fichiers déportés et ainsi de suite, donc à un moment le template il est beau mais bon si le truc provoque le non fonctionnement d'un site on préférera un template plus moche mais qui fonctionne et donc qui vend.

Link to comment
Share on other sites

Bonjour, désolé j 'ai du mal a comprendre le test, je vois qu'on est en F sur deux point sécurité et 1 octet.Pourriez-vous me tranmsettre une procédure qui me permettrai de trouver ce bug car ce bug est aléatoire mais tellement génant que nous perdons enormement de clients.Ce matin 9h le site mettait presque 1min par de chargement des pages impossible a utiliser ? MERCI

Link to comment
Share on other sites

Sur dareboost merci pour le lien d'ailleurs on nous indique que c'est les images mais leur tailles sont pourtant retravailler avant leur upload leur taille est pour moi peut conséquente.C'est une boutique donc avoir des images est je pense normal ? merci pour votre aide.

Link to comment
Share on other sites

qq conseils,

faites vos audits avec google page speed

les 3 mesures critiques sont FCP, LCP et CLS

278985869_Capturedecran2021-04-22a10_14_22.thumb.png.9cd2d8cd1fb0b68872c4d67e53c4e717.png

 

utilisez cloudflare

utilisez tinypng https://tinypng.com/ pour compresser vos image,

1780524949_Capturedecran2021-04-22a10_14_45.thumb.png.651a0aa6e21904e2487195fde22a96dc.png

utilisez le webp plutot que le jpg (un simple override d'image manager permet d'utiliser la librairie GD en compression webp)

utilisez la librairie lazy size afin de faire du lazy loading sur les image et faire du responsive image: https://github.com/aFarkas/lazysizes

cdt

Link to comment
Share on other sites

très bien je vais m'occuper des images les compresser et les reuploader, je n'ai jamais utiliser de librairie je vais voir qu'on procéder.J'avais testr google page speed mais je ne comprends pas trop les résultats FCP, LCP et CLS ? 

Link to comment
Share on other sites

Pourtant nos images sont redimensionner avant chaque upload et je ne comprends pas c'est que bug de lenteur est sur tous le site a chaque appel d'une page cela n'indique pas que justement cela ne peut etre dut au image mais a quelques chose d'autre surtout si c'est aleatoire ? MERCI

Link to comment
Share on other sites

Il faudrait analyser en profondeur:

- les requete en BDD avec le mode debug profiling activé

- verifier les modules installé, peut etre qu il font des appels API (desactiver / desinstallé un par un)

- Peut etre deconnecter votre prestashop a Prestashop Addon, des fois leur API bug

si ca ne suffit pas, analyser le fichier access.log du serveur et voir si votre site ne subit pas des attaques DOS le cas échanchéant bannir les IP

cdt

Link to comment
Share on other sites

ben deja ne pas faire des appels a google font, privilégier la mise en place des fonts sur le serveur, ensuite la performance c'est a la conception du theme... Dans le cas de cette reco lighthouse  faire du Critical CSS... Néanmoins un site prestashop performant se fait" from scratch" et non avec un theme, c'est un travail qui requiert beaucoup de connaissances... une astuce est de ne pas charger les biblithèques des fonts pour les icones (font awesome , material design) mais de privilégier les svg, ca permet d'eviter de charger une font de 200 icones alors qu en réalité vous en utilisez que 4 ou 5

Edited by Alexandre Carette (see edit history)
Link to comment
Share on other sites

bonjour notre hebergeur vient de nous signaler que ce sont des requetes php mysql avec jointure trop importante qui fait ce bug ? Il ne pense pas que ce soit un module on les a presque tous desactiver.On ne sait plus quoi faire on est perdu beaucoup de client se plaignent.

Link to comment
Share on other sites

Oui on l'avait fait pour un module de panier abandonne mais j.ai desactiver car il ne fonctionner pas.

Qu'est ce qu'un erp ?

On a liaison avec PayPal et lcl Sherlock ainsi que mondial relay et colissimo.

Si c'est un cron ne le verront on pas dans les logs ?

Merci pour votre aide.

Link to comment
Share on other sites

Un serveur mutualiste mais performant on a deja installer une boutique 1.7 dessus jamais de problème de ce type et pour eux tous est nickel.On a monter même en performance on maximum dessus pour voir mais le bug est toujours la 😥

Link to comment
Share on other sites

deja ce que vous pouvez faire c'est stopper la connection avec Prestashop Addons

<?php
/**
 * Copyright since 2007 PrestaShop SA and Contributors
 * PrestaShop is an International Registered Trademark & Property of PrestaShop SA
 *
 * NOTICE OF LICENSE
 *
 * This source file is subject to the Open Software License (OSL 3.0)
 * that is bundled with this package in the file LICENSE.md.
 * It is also available through the world-wide-web at this URL:
 * https://opensource.org/licenses/OSL-3.0
 * If you did not receive a copy of the license and are unable to
 * obtain it through the world-wide-web, please send an email
 * to [email protected] so we can send you a copy immediately.
 *
 * DISCLAIMER
 *
 * Do not edit or add to this file if you wish to upgrade PrestaShop to newer
 * versions in the future. If you wish to customize PrestaShop for your
 * needs please refer to https://devdocs.prestashop.com/ for more information.
 *
 * @author    PrestaShop SA and Contributors <[email protected]>
 * @copyright Since 2007 PrestaShop SA and Contributors
 * @license   https://opensource.org/licenses/OSL-3.0 Open Software License (OSL 3.0)
 */
use Composer\CaBundle\CaBundle;
use PHPSQLParser\PHPSQLParser;
use PrestaShop\PrestaShop\Adapter\ContainerFinder;
use PrestaShop\PrestaShop\Core\Exception\ContainerNotFoundException;
use PrestaShop\PrestaShop\Core\Foundation\Filesystem\FileSystem as PsFileSystem;
use PrestaShop\PrestaShop\Core\Localization\Exception\LocalizationException;
use PrestaShop\PrestaShop\Core\Localization\Locale;
use PrestaShop\PrestaShop\Core\Localization\Locale\Repository as LocaleRepository;
use PrestaShop\PrestaShop\Core\String\CharacterCleaner;
use PrestaShop\PrestaShop\Core\Util\ColorBrightnessCalculator;
use Symfony\Component\Filesystem\Filesystem;
use Symfony\Component\HttpFoundation\Request;

class Tools extends ToolsCore
{
    public static function addonsRequest($request, $params = [])
    {
            return false;
    }
}

Mettre ce fichier dans /override/classes

Tools.php

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...