Proposition de réglage pour améliorer les performances

Proposition de réglage pour améliorer les performances

Réglage pour améliorer les performances

Bien que PrestaShop est la réputation d'être lent, je trouve que ça n'est pas du tout les cas. Surtout comparer à Wordpress + wooCommerce.

Cependant, comme tous les CMS on peut grandement améliorer les performance.

Pour info, ce blog utlise le motteur de Prestashop 1.7.5 avec comme moteur de xipblog

.

En bref, avec cette combinaison, c'est pas dure d'avoir des temps de chargement assez rapide.

Egalement, j'utilise d'autres optimisations un peu plus complexes à mettre en oeuvre, mais qui peuvent poser problème si on a pas forcement bien compris comment les bugguer en cas de régressions. Bref... sur cet article, je propose juste des réglages de base pour le developpement ou la prod et qui ne posent aucun soucis de régression.

1. Supprimer les accès au server addons :

Forcément avant, téléchargez dans la librairie Presta tous les modules qui vous intéresse (), puis faites les maj.

protected static $is_addons_up = false;

Et :

protected static $is_addons_up = false;

2. Désactiver les détections automatiques de langue

Si vous avez une boutique déstinée seulement au marché français, inutil de vérifier les langues, les currencies, ou la geolocalisation (la geoloc est désctivév par défaut).

Ces réglages sont toujours activés par défaut. Vous pouvez les changer. Vous pouvez également supprimer les modules ps_currency et ps_langue.

Désactiver les détections automatiques de langue
(Menu -> International -> Localisation)

Vous pouvez retrouver ces réglages en base dans la table ps_configuration:

UPDATE `ps_configuration` SET `value` = '0' WHERE `name` = 'PS_DETECT_LANG';
UPDATE `ps_configuration` SET `value` = '0' WHERE `name` = 'PS_DETECT_COUNTRY';
UPDATE `ps_configuration` SET `value` = '0' WHERE `name` = 'PS_GEOLOCATION_ENABLED';

3. Ajouter ces 3 indexs

Le panier est systématique vérifié, appelé, etc... J'ai passé la principal requète Sur everSQL. Pour une optimisation des appels de cart, cette optimisation me parraissait interessante, je vous la mets ici:

Je précise que les ajoutw d'index ne changent pas drastiquement les performances sur un moteur InnoBD. Mais sur toutes les requètes que j'ai benché, celui-ci me parraît être la plus intéressante, et c'est toujours ça de pris

ALTER TABLE `ps_cart_product` ADD INDEX `ps_cart_product_idx_attrib_custom_cart_produc_quanti` (`id_product_attribute`,`id_customization`,`id_cart`,`id_product`,`quantity`);
ALTER TABLE `ps_cart_product` ADD INDEX `ps_cart_product_idx_attribu_customi_cart_quantit` (`id_product_attribute`,`id_customization`,`id_cart`,`quantity`);
ALTER TABLE `ps_pack` ADD INDEX `ps_pack_idx_item_pack_quantity` (`id_product_item`,`id_product_pack`,`quantity`);

4. Modifier ObjectModel.php

Toucher au core, c'est toujours un peu compliqué au justifier, mais à cache fois qu'on fait des inserts en base, en fait, les datas sont systémqatiquement vérifiées 2 fois (par le controller utlisé et par la class DB).

Si vous avez pas de trop de modules personels mal développés (au cas où, dans ces modules, il n'y aurait pas de premier check des datas), n'ajoutez pas cette optimisation. Sinon, bien, c'est possible de gagner un peu de temps server.


function validateFields -> return true;
ligne 1380, 940, 975

5. Override de la classes Links

Le problème avec cette optimisation, c'est qu'à chaque mise en prod faudra changer cet override (http -> https). Le problème avec cette méthode (getBaseLink()), c'est qu'il n'y a pas de cache sur cette fonction. Et elle est toujours appellée, des dizaines de fois par page. On pourrait mettre un cache. Mais la modifier comme ci-dessous est plus facile à mettre en place. L'idée c'est de faire un bel override.

public function getBaseLink($idShop = null, $ssl = null, $relativeProtocol = false)
{
    return 'http://'.Configuration::get('PS_SHOP_DOMAIN').'/';
}

6. Changer le CDN de jQuery

Voir cet article pour les solutions pour changer le CDN de votre thème Prestashop.

En bref...

Avec c'est 5 réglages, vous allez gagner 50ms voir 100ms suivant votre server. L'idée c'est de vraiment gagner du temps server. Mais c'est inutile de la faire si vos titres, métas, descriptions, etc.. ne sont remplis correctement et fignolés correctement.

7. Si vous êtes developpeur

Systématiquement, j'ajoute ces 3 méthodes dans la classes Tools.php.

public static function microtime_float() { list($usec, $sec) = explode(" ", microtime()); return ((float)$usec + (float)$sec); }
public static function d($object, $kill = true) { return (Tools::dieObject($object, $kill)); }
public static function p($object) { return (Tools::dieObject($object, false)); }

La classe microfloat est juste là pour bencher.

Les méthodes d() et p() sont les méthodes de débug de PS1.6. C'est vraiment une question d'habitude, et je n'arrive pas à me passer des ces méthodes, que je trouve vraiment pratiques. Quand on compare à la méthode dump() de Symfony, on se dit que forcement, il y a un air de ressemblance, et que dump() doit être plus performant. Mais je trouve l'import du script JS qui permet de faire les cherches plus rapidement. En fait je ne trouve pas ça pratique du tout. Je préfère de loin les méthodes d() et p(). Bref, à vous de voir.