FAQ Améliorer les performances

From Dolibarr ERP CRM Wiki
Jump to navigation Jump to search

Dolibarr est une application Web qui a fait l'objet d'une conception poussée pour obtenir un temps de réponse le plus optimisé possible. De nombreuses technologies sont mises en oeuvre mais certaines ne sont pas actives par défaut car nécessite des compétences ou habilitations particulières pour les mettre en oeuvre. Voici toutes les choses que vous pouvez mettre en oeuvre pour améliorer encore plus la réactivité de l'application.


Solutions recommandées

Utiliser la dernière version de PHP

Efficacité: ***

Principe: Chaque nouvelle version de PHP rend l'application plus rapide que la précédente. Donc, si vous le pouvez, mettez à niveau.

Activer HTTP/2

Efficacité: *

Principe: Le protocole HTTP/2 est connu pour être plus rapide que HTTP/1.1. Donc, si votre système d'exploitation et votre serveur Web sont compatibles, activez-les simplement.

Désactivation de xdebug

Efficacité: *****

Principe: Si le module php xdebug est actif, il vous faut le désactiver. Ce module est une fonctionnalité de PHP qui sert aux développeurs mais ralentit fortement le fonctionnement de toute application PHP. Pour savoir si ce module est actif, aller dans la pages Accueil-Configuration-Infos systèmes-PHP et faites une recherche sur xdebug. Si vous ne trouvez rien, le module n'est pas actif. Si vous trouvez une occurrence, il est actif et peut être désactivé. Son activation/désactivation dépend de votre système PHP et OS mais le plus souvent on le désactive en commentant une ligne dans le fichier php.ini

Cache applicatif via MemCached

Efficacité: *****

Principe: Installer un serveur de cache Memcached et le Module MemCached.

Cache PHP OPCODE

Efficacité: ****

Principe: Installer un module apache/php qui met en cache la compilation de vos pages PHP. A chaque accès, une page auquel on a déjà accédé sera plus rapide d'accès. Pour cela vous pouvez installer n'importe quel accélérateur PHP. xcache fait partie des solutions recommandées. Notons que ce cache joue ici sur un niveau différent que le Module MemCached, les gains sont donc cumulatifs !

Cache HTTP des pages statiques

Efficacité: ***

Principe: Vous pouvez configurer apache pour activer le cache explicite des ressources statiques en ajoutant les directives:

# Cache for static resources (Enable expiration and set it to A2592000 = 1 month)
ExpiresActive On
ExpiresByType image/x-icon A2592000
ExpiresByType image/gif A2592000
ExpiresByType image/png A2592000
ExpiresByType image/jpeg A2592000
ExpiresByType text/css A2592000
ExpiresByType text/javascript A2592000
ExpiresByType application/x-javascript A2592000
ExpiresByType application/javascript A2592000

La encore les gains sont cumulatifs avec les caches précédents.

Warning.png Après avoir ajouté cela, vous devez recharger la configuration du serveur web mais également vider le cache local du navigateur afin de forcer ce dernier à redemander la ressource et récupérer le nouvel entête.

Compression des ressources par Apache

Efficacité: ***

Principe: Vous pouvez configurer Apache pour activer la compression des ressources renvoyées par le serveur grâce aux directives suivantes:

# Compress returned resources of type php pages, text file export, css and javascript
AddOutputFilterByType DEFLATE text/html text/plain text/xml text/css text/javascript application/javascript application/x-javascript

Warning.png Après avoir ajouté cela, vous devez recharger la configuration du serveur web mais également vider le cache local du navigateur afin de forcer ce dernier à redemander la ressource et récupérer le nouvel entête.

Utilisation du driver mysqli plutôt que mysql

Efficacité: ***

Principe: Si vous utilisez une base de données Mysql, vérifiez dans votre fichier de configuration Dolibarr htdocs/conf/conf.php que vous avez bien la ligne

$dolibarr_main_db_type='mysqli';

Si la valeur vaut mysql, changez la en mysqli qui donne de meilleures performances (gain de 30ms à chaque page).

Recherche sur début de champ

Efficacité: ***

Principe: Si vous avez activé dans le module Produit la recherche par "autocomplete" et si la liste met du temps à apparaitre à chaque saisie de caractère, c'est que vous avez un nombre important de produit. La recherche se faisant n'importe ou dans le texte, l'index de base de donnée ne peut être utilisé. En ajoutant la constante PRODUCT_DONOTSEARCH_ANYWHERE à 1 dans Accueil-Configuration-Divers, vous limitez la recherche au début de la chaine rendant possible l'utilisation de l'index et obtiendrez une réponse immédiate. De même, vous avez COMPANY_DONOTSEARCH_ANYWHERE pour le recherche de Tiers.

Désactivation des ajax combo

Efficacité: ***

Si vous avez un largen nombre de tiers ou produits (> 5000), vous pouvez désactiver la fonctionnalité autocomplete sur la liste des tiers ou produits en positionnant la contante MAIN_DISABLE_AJAX_COMBOX à 1 dans Accueil-Configuration-Autre (avec Dolibarr v3.6.0+).

Utilisation d'un navigateur récent

Efficacité: ***

Principe: De plus en plus de fonctionnalités sont basés sur les technologies Ajax ou javascript afin d'offrir une ergonomie moderne. Ces technologies, ont une part non négligeable dans le temps d'affichage de certaines pages et sont beaucoup mieux exploités avec un navigateur Web récent. Les écarts en performance d'une version à l'autre sont parfois très importante, aussi pensez à utiliser un navigateur web optimisé et en version la plus récente possible (Firefox, Chrome, Safari ou Opera). Eviter IE ou autre navigateurs exotiques.

Mise à jour de statistiques de base

Efficacité: **

Principe: Si vous avez une base de donnée volumineuse (plus de 100 000 enregistrements), vérifiez que les statistiques de vos données sont à jour. Ceci requiert un accès administrateur à la base de donnée et des connaissances en administration de base. Consulter le manuel de la base de donnée sur le sujet "mise à jour des statistiques" pour cela.

Autres solutions

Toutes les solutions ici sont catégorisées à part dans ce chapitre "Autres solutions" car elles ne sont pas recommandées. Toutes les solutions suivantes peuvent nécessiter des connaissances techniques avancées, peuvent être instables, non supportées ou peuvent rendre certaines fonctionnalités inopérationnelles... mais elles existent, aussi ne les employez que si vous savez ce que vous faites !

Cache applicatif via la Shared memory

Efficacité: ****

Prérequis: Utilisation du serveur web Apache

Principe: Ajouter dans Accueil-Configuration-Divers la constante MAIN_OPTIMIZE_SPEED. Si la valeur de cette constante a le bit 1 défini (Exemple: MAIN_OPTIMIZE_SPEED=2), la shared memory de votre OS est utilisée pour mettre en cache les fichiers lang, mais cela implique aussi que tout l'interface ne sera visible que dans une seule langue, celle du premier qui se connecte après un redémarrage du serveur web (qui charge les fichiers langues en cache). De plus, la shared memory peut s'avérer instable sur certains OS (Windows). Utiliser plutôt le Module MemCached pour une optimisation par un cache applicatif qui n'a aucune de ces contraintes et est encore plus performant, cette action sera alors inutile.

Désactiver le génération des PDF "à la volée"

Efficacité: **

Vous pouvez ajouter la constante MAIN_DISABLE_PDF_AUTOUPDATE dans Accueil - Configuration - Autre.

Ceci désactivera la régénération du PDF à chaque fous que vous modifier un élément (facture, commande, ...). La génération du PDF aura lieu uniquement sur click du bouton "Générer".

Compression des ressources par Dolibarr

Efficacité: **

Principe: Ajouter dans Accueil-Configuration-Divers la constante MAIN_OPTIMIZE_SPEED. Si la valeur de cette constante a le bit 2 défini (Exemple: MAIN_OPTIMIZE_SPEED=4), Dolibarr renverra les pages compressés en GZ (et si le navigateur le supporte). Cela consomme plus de CPU sur le serveur mais réduit le temps de transfert. Préferrez toutefois la compression configuré par Apache (voir plus haut). Ne pas activez les 2 méthodes en même temps.

Désactiver la fonction Canvas

Efficacité: *

Principe: Ajouter dans Accueil-Configuration-Divers la constante MAIN_DISABLE_CANVAS à la valeur 1. Ceci désactivera les fonctions de gestion de canvas qui peut être utilisé par certains modules externes et économisera une requête sur la base à chaque fois que vous accédez à la fiche d'un objet. Cependant, si un module externe utilise cette fonction de canvas, ceci rendra le module défectueux. Si vous n'avez installé aucun module complémentaire externe, il n'y a pas de risques.


Rem: Pour obtenir la totalité des optimisations utilisant MAIN_OPTIMIZE_SPEED, il faut activer tous les bits (Exemple: MAIN_OPTIMIZE_SPEED=7 donc 1+2+4 contient le bit 0, 1 et 2).