osCommerce France : Accueil Forum Portail osCommerce France Réponses aux questions Foire aux contributions

Bienvenue invité ( Connexion | Inscription )

 
Reply to this topicStart new topic
> Optimisez les performances de votre boutique !
petrus
posté 27 May 2005, 07:25
Message #1


Ceinture orange OSC
Icône de groupe

Groupe : Membres
Messages : 193
Inscrit : 18-January 05
Membre no 4421



Bonjour,

J'ai trouvé cet article fort intéressant sur le forum osCommerce anglophone. J'ai appliqué les recommandations qu'il contient et les performances de ma boutique se sont de ce fait considérablement améliorées.

D'où l'idée de le partager avec la communauté francophone. Certains d'entre vous l'ont déjà certainement lu, mais je pense en partiulier à ceux qui ne maîtrisent pas la langue de Shakespeare.

L'auteur de cet article est Bobby Easland, alias Chemo. Il est l'auteur de nombreuses contributions. Vous pouvez trouver l'intégralité du fil de discussion ici.

Bonne lecture !

QUOTE

Comment optimiser la vitesse/performance de votre boutique – par Chemo


Maintenant que votre boutique est opérationnelle et dotée de produits, il est temps de porter votre attention sur les performances de votre site. D’une façon générale, les clients aiment les pages se chargeant rapidement. S’ils doivent attendre durant le chargement, le taux de conversion des visites en achats diminuera. Voici donc quelques éléments de base, mais essentiels, de l’optimisation des performances.


IMAGES

De loin le coupable principal du ralentissement du chargement des pages ! Une réponse simple est d’installer un générateur automatique de vignettes avec gestion de cache. Il est important d’utiliser un générateur mettant en cache les images plutôt que de les générer à la volée, ceci dégradant terriblement les performances. Les effets peuvent ne pas être sensibles sur une boutique recevant 1 ou 2 visiteurs à l’heure, mais si la fréquentation est significative, vous devez absolument mettre vos images en cache. Après tout, vous avez consacré des ressources du serveur à la création de vignettes, alors pourquoi ne pas les stocker pour les réutiliser plus tard au lieu de les recréer ?


CONTRIBUTIONS

Installez SEULEMENT celles que vous devez utiliser et SEULEMENT celles qui vont faire gagner du temps ou ajouter de la valeur au processus d’achat. Les contributions répondant à ces critères dépendent de votre type de boutique et des produits que vous vendez. Toute contribution est consommatrice de ressource, que ce soit du code PHP pur ou bien des requêtes MySQL (ou les deux). Règle d’or : N’INSTALLEZ QUE LE NOMBRE MINIMUM DE CONTRIBUTIONS. Trop souvent, un propriétaire de magasin devient fou de contributions et installe tous les gadgets possibles. Ceci fait considérablement gonfler la base de code et les performances en souffrent... l'intention est d’améliorer le processus d'achat mais l'effet est de le DÉGRADER en raison de la lenteur de chargement.


ENLEVEZ LES FONCTIONS INUTILISÉES

Plusieurs fonctions de l’OsCommerce de base sont ou ne sont pas utilisées, dont le retrait améliorerait les performances. Par exemple : les bannières, l’affichage en pied de page du "nombre de requêtes depuis", qui est en ligne, etc.

Si vous n’utilisez pas ces fonctions, enlevez (commentez) le code.

L’élimination de ces fonctions a un autre avantage : il ne sollicite pas les fonctions de cache de requêtes MySQL. Lors de chaque insert, le cache est vidé. Bien entendu, cela suppose aussi de stocker les sessions dans le système de fichiers !


STS - Simple Template System

Je veux mettre un accent particulier sur cette contribution, car c’est l’un des pires consommateurs de requêtes, et c’est aussi l’un des systèmes de template pour osCommerce les plus populaires. Si vous avez un nombre de catégories significatif dans votre boutique, cette contribution va tuer les performances de votre site. Elle réalise un balayage complet de table lors de chaque demande de chargement de page. Si vous avez plus d’une centaine de catégories, le temps de chargement augmentera de 200 à 300% suivant les caractéristiques du serveur.

Bref, si vous voulez de la vitesse, n’utilisez pas de système de template… Apprenez à modifier cette application monolithique qu’est osCommerce.


SESSIONS

Si vous stockez les sessions dans la base de données, il vous faut ajouter un index primaire multi-colonnes sur les colonnes "sesskey" et "expiration". Cela prendra davantage d'espace physique mais ce sera beaucoup plus rapide.


CACHE – Stockage du Code et mise en Cache des Pages

La possibilité de mettre des données en cache est déterminante pour les performances... particulièrement si vous avez de nombreuses catégories, produits et/ou commandes. Je recommande de créer un répertoir AU-DESSUS de la racine accessible publiquement et de lui donner les permissions en lecture/écriture pour le serveur. Le fait de placer ce cache AU-DESSUS de la racine du site empêche l'accès de hackers avec leur explorateur. Réglez vos paramètres  de cette façon et ne stockez pas le cache dans le répertoire "/tmp", cela évitera des riques inutiles.

Une fois ces réglages effectués, ACTIVEZ LE CACHE. L'effet est particulièrement sensible sur la box "catégories" !

La contribution Page Cache a été créée pour les boutiques ayant tant de contributions installées qu'il est pratiquement impossible d'optimiser le code. La bonne solution est de ne pas surcharger la boutique de contributions non nécessaires...Mais si vous êtes dans ce cas, Page Cache est fait pour vous. J'utilise Page Cache en dernier ressort, pas comme un premier choix.


COMPACTEZ VOS PAGES HTML

La plupart connaissent la compression de pages via GZIP. Le réglage optimal pour la vitesse est la compression de niveau 1; les niveaux de compression supérieurs ne réduiront pas de façon significative la taille des pages. Quoi qu'il en soit, il est bon de compresser physiquement les données à Gzipper en enlevant les espaces et les sauts de lignes superflus.

Voici la fonction que j'utilise :

CODE


function compress_buffer ($buffer) {
# Return the compressed buffer
return str_replace("\n", ' ', preg_replace('/\>\s+\</', '> <', $buffer));
}


Bien sûr, ce n'est qu'un point de départ et vous allez devoir imaginer comment le combiner avec GZIP.

Précisions :

Dans includes/functions/gzip_compression.php :
1) Insérer la fonction ci-dessus.
2) Remplacer

CODE

/* $level = compression level 0-9, 0=none, 9=max */
 function tep_gzip_output($level = 5) {
   if ($encoding = tep_check_gzip()) {
     $contents = ob_get_contents();
     ob_end_clean();

     header('Content-Encoding: ' . $encoding);

     $size = strlen($contents);
     $crc = crc32($contents);

     $contents = gzcompress($contents, $level);
     $contents = substr($contents, 0, strlen($contents) - 4);

     echo "\x1f\x8b\x08\x00\x00\x00\x00\x00";
     echo $contents;
     echo pack('V', $crc);
     echo pack('V', $size);
   } else {
     ob_end_flush();
   }
 }


Par :

CODE

/* $level = compression level 0-9, 0=none, 9=max */
function tep_gzip_output($level = 1) {
  if ($encoding = tep_check_gzip()) {
    $content = ob_get_contents();
 $contents = compress_buffer( $content );
 unset( $content );
    ob_end_clean();

    header('Content-Encoding: ' . $encoding);

    $size = strlen($contents);
    $crc = crc32($contents);

    $contents = gzcompress($contents, $level);
    $contents = substr($contents, 0, strlen($contents) - 4);

    echo "\x1f\x8b\x08\x00\x00\x00\x00\x00";
    echo $contents;
    echo pack('V', $crc);
    echo pack('V', $size);
  } else {
    $contents = ob_get_contents();
    ob_end_clean();
 echo compress_buffer( $contents );
  }
}




La compression physique des pages avec GZIP réduira le code HTML en sortie de près de 60 à 75% et améliorera nettement les performances, spécialement avec les connexions par modem.


OPTIMISATION DU CODE ET DES REQUÊTES

J'ai voulu aborder ce point en dernier car c'est celui pour lequel les cas de figures sont les plus variés.Cela est dû au fait que chaque boutique est différente. Elles comencent toutes avec la même base de code, mais chacun installe des contributions différentes. Le résultat en est une grande diversité quant au code à optimiser.

Un bon point de départ est d'installer une bonne contribution de déboggage des requêtes. Cela vous permettra de voir les requêtes exécutées pour chaque page, et d'identifier facilement celles qui sont redondantes ou trop longues à exécuter. Une fois que vous avez mis le doigt sur ce qui doit êtr amélioré, c'est plus facile de le faire…...Ne faites jamais AUCUNE optimisation aveugle. Modifiez TOUJOURS le code dans un but précis. C'est du bon sens ? Vous seriez surpris...

Encore une fois, je n'aborderai pas les optimisations relatives à des contributions spécifiques, mais seulement celles qui sont communes à toutes les boutiques osC. La classe de taxes MS3 pour la MS2 en est une. Elle remplace la classe de taxes MS2 d'origine par la nouvelle classe de taxes de la MS3, qui est beaucoup plus efficace, et moins gourmande en requêtes par page. LA REQUÊTE DE TAXE EST EXÉCUTÉE À CHAQUE AFFICHAGE DE PRIX, MÊME SI L'AFFICHAGE DE LA TVA EST DÉSACTIVÉ. C'est important de le savoir, car la plupart pensent qu'en désactivant l'option dans le panneau d'administration, il n'y aura pas de requête de taxe... C'est faux et, MÊME SI L'OPTION EST DÉSACTIVÉE, LA REQUÊTE DE TAXE SERA EXÉCUTÉE. Pourquoi est-ce important ? Parce que  cette requête est l'une des plus gourmandes en ressources serveur ! En 2 minutes d'installation, cette nouvelle classe de taxes va accroître considérablement les performances.

Le module also_purchased est un puissant outil d'aide à la vente bien qu'il soit de loin le plus gros consommateur de requêtes dans une application osCommerce. C'est particulièrement vrai pour les boutiques dotées d'un nombre significatif de produits et de commandes. J'ai déjà vu ce module mettre à genoux un serveur biprocesseur 2.8 Ghz avec 1Go  de RAM...en exécutant seulement 1 requête. À mesure que vous accumulez les commandes, vous sentirez les produits pour lesquels la vente croisée serait idéale. Aussi, il serait bon d'installer une contribution de vente croisée. C'est un peu plus lourd à maintenir mais l'accroissement de la performance qui en résulte en vaut la peine.

À chaque demande de page, le contenu de la table est chargé. L'implication de cela, c'est qu'à chaque demande de page, le serveur doit scanner la table pour générer les données...ce qui, en fonction des contributions installées, ajoutera de la charge à chaque chargement de page. Pour remédier à cela, il y a une excellente contribution : Faster Page Loads, Less DB Queries. Cette contribution met les données en cache et élimine les requêtes dans la base de données...réservant ainsi le balayage de table aux cas où la page n'est pas présente en cache. Cette contribution est FORTEMENT recommandée.

Ce post ne prétend pas être un guide absolu de l'optimisation d'une boutique osCommerce mais vous donnera, j'espère, quelques repères pour savoir où faire porter vos efforts en priorité.



--------------------
Pierre

MS2 Fr - Easy Populate - Main Categories - Colissimo suivi - Send order html email - Box Image Thema - admin : copy, move and delete multiple products - Add new Fields - Featured Products - Ultimate SEO URLs 2.1d - Faster Page Loads, Less DB queries - Page Cache - Credit Class & Gift Voucher - Specials on Default - leguide.com - Google XML Sitemap
Go to the top of the page
 
manmachine
posté 31 May 2005, 08:16
Message #2


Ceinture marron OSC
Icône de groupe

Groupe : Modérateurs
Messages : 1814
Inscrit : 2-July 04
Lieu : Nantes
Membre no 2788



une note a propos de STS template :

QUOTE

Je veux mettre un accent particulier sur cette contribution, car c’est l’un des pires consommateurs de requêtes, et c’est aussi l’un des systèmes de template pour osCommerce les plus populaires. Si vous avez un nombre de catégories significatif dans votre boutique, cette contribution va tuer les performances de votre site. Elle réalise un balayage complet de table lors de chaque demande de chargement de page. Si vous avez plus d’une centaine de catégories, le temps de chargement augmentera de 200 à 300% suivant les caractéristiques du serveur.


ceci est vrai parceque cettecontrib est installé avec une box suplementaire qui est en fait une liste deroulante des categories .. il suffit de supprimer celle ci du template et du fichier sts_user_code.php .

sinon elle ne consomme pas plus de ressource qu'autre chose .. ce problem est d'ailleur le meme pour des contribs comme les menus javascript pour les categories , qui font une requete sur toutes les categories a chaque chargement si le cache n'est pas utilisé pour celle ci .


--------------------
Nous ne sommes pas un SAV, nous aidons, mais nous ne faisons pas à votre place ..
Go to the top of the page
 
zetlakif
posté 2 Aug 2006, 14:27
Message #3


Ceinture jaune+ OSC
Icône de groupe

Groupe : Membres
Messages : 85
Inscrit : 3-May 06
Lieu : Avignon
Membre no 10232



Salut man machine! Que dois t'on supprimer dans sts_user_code.php

CODE

    $sts->start_capture();
    echo "\n<!-- Start Category Menu -->\n";
    echo tep_draw_form('goto', FILENAME_DEFAULT, 'get', '');
    echo tep_draw_pull_down_menu('cPath', tep_get_category_tree(), $current_category_id, 'onChange="this.form.submit();"');
    echo "</form>\n";
    echo "<!-- End Category Menu -->\n";
    $sts->stop_capture('catmenu');

  function tep_get_category_tree($parent_id = '0', $spacing = '', $exclude = '', $category_tree_array = '', $include_itself = false) {
    global $languages_id;

    if (!is_array($category_tree_array)) $category_tree_array = array();
    if ( (sizeof($category_tree_array) < 1) && ($exclude != '0') ) $category_tree_array[] = array('id' => '0', 'text' => "Catalog");

    if ($include_itself) {
      $category_query = tep_db_query("select cd.categories_name from " . TABLE_CATEGORIES_DESCRIPTION . " cd where cd.language_id = '" . (int)$languages_id . "' and cd.categories_id = '" . (int)$parent_id . "'");
      $category = tep_db_fetch_array($category_query);
      $category_tree_array[] = array('id' => $parent_id, 'text' => $category['categories_name']);
    }

    $categories_query = tep_db_query("select c.categories_id, cd.categories_name, c.parent_id from " . TABLE_CATEGORIES . " c, " . TABLE_CATEGORIES_DESCRIPTION . " cd where c.categories_id = cd.categories_id and cd.language_id = '" . (int)$languages_id . "' and c.parent_id = '" . (int)$parent_id . "' order by c.sort_order, cd.categories_name");
    while ($categories = tep_db_fetch_array($categories_query)) {
      if ($exclude != $categories['categories_id']) $category_tree_array[] = array('id' => $categories['categories_id'], 'text' => $spacing . $categories['categories_name']);
      $category_tree_array = tep_get_category_tree($categories['categories_id'], $spacing . '   ', $exclude, $category_tree_array);
    }

    return $category_tree_array;
  }
  


Merci
Go to the top of the page
 
Rigadin
posté 12 Dec 2006, 12:37
Message #4


Ceinture orange OSC
Icône de groupe

Groupe : Membres
Messages : 164
Inscrit : 8-March 06
Lieu : Helsinki
Membre no 9340



Il faut supprimer exactement le code que tu as posté. En fait cela revient à avoir sts_user_code.php vide (si aucun code personel n'a été ajouté).

A noter que la compression GZip ne fonctionne pas encore avec STS (pour le moment la dernière version publiée étant 4.3.2). Je vais essayer de trouver un moment pour faire un nouveau service pack...

- Rigadin



--------------------
STS 4.5.5 est arrivé!
Go to the top of the page
 
Rigadin
posté 12 Dec 2006, 13:24
Message #5


Ceinture orange OSC
Icône de groupe

Groupe : Membres
Messages : 164
Inscrit : 8-March 06
Lieu : Helsinki
Membre no 9340



Voilà, j'ai pris un peu de temps pour zipper mes fichiers et STS se dote d'une nouvelle révision compatible avec la compression GZip.

- Rigadin


--------------------
STS 4.5.5 est arrivé!
Go to the top of the page
 
Quadricolor
posté 11 Jul 2007, 10:07
Message #6


Ceinture orange+ OSC
Icône de groupe

Groupe : Membres
Messages : 353
Inscrit : 17-April 05
Lieu : Plus dans le sud que dans le nord
Membre no 5534



CITATION
Bref, si vous voulez de la vitesse, n’utilisez pas de système de template… Apprenez à modifier cette application monolithique qu’est osCommerce.
au hasard de ma navigation sur le forum, je suis tombé sur un post (celui çi qui date d'hier) ou quelqu'un reprenait un extrait de ce topic. Et quel n'a pas été le bond que j'ai fais sur ma chaise quand je vois que les gens ont pris ça au pied de la lettre.

Alors je ne sais pas comment fonctionne STS, mais il y a fort longtemps, j'ai installé un BTS (1.2 je crois) que j'ai depuis fondamentalement modifié, et qui n'avait même dans sa version d'origine nul besoin de faire de requête suplémentaire. Mais dire que OsC est une application monolithique ferait bien de la peine à tous les talentueux designers qui ont exploité un moteur de template wink.gif

Ce message a été modifié par Quadricolor - 11 Jul 2007, 10:08.
Go to the top of the page
 
cocomino
posté 11 Jul 2007, 21:01
Message #7


Ceinture marron OSC
Icône de groupe

Groupe : Membres
Messages : 1690
Inscrit : 10-October 06
Lieu : Rives du Lez
Membre no 12571



Quadricolor
CITATION
quelqu'un reprenait un extrait de ce topic

Ah bon ? qui ça ? blush.gif

Mon post dans le sujet en question n'était qu'un warning, accompagné lui même avec le lien vers ce sujet, où manmachine apporte une précision importante sur STS.
En aucune façon, je visais à faire de "la peine à tous les talentueux designers qui ont exploité un moteur de template".

"Mais dire que OsC est une application monolithique " : cependant, il est à noter que la future version d'Osc3 s'oriente sur un code XHTML/CSS2 (entre autre) et va gagner "en souplesse" sur la prise en main du design, en comparaison de la gestion en tableau, obsolète aujourd'hui car le script date de 2002.

Je ne dénigre rien, bien au contraire, je resterai toujours la première à défendre le travail accompli par HDPL et son équipe.
Je tacherai à l'avenir de nuancer mes réponses sur ce forum afin d'éviter de faire faire des "bonds" rolleyes.gif

Cdt


--------------------
"Pourquoi vois-tu la paille qui est dans l'oeil de ton frère et n'aperçois-tu pas la poutre qui est dans ton oeil ?".(Saint Luc, VI-41)
Go to the top of the page
 
mosaic
posté 13 Mar 2009, 00:09
Message #8


Ceinture noire OSC
Icône de groupe

Groupe : Modérateurs
Messages : 2908
Inscrit : 24-October 04
Lieu : Quimper ( Finistère )
Membre no 3567



en appliquant un index sur sesskey, voilà ce dont m'informe phpMyadmin :

La colonne `sesskey` ne devrait pas faire partie à la fois d'une clé primaire et d'une clé index


--------------------
#mosaic {
autodidacte: max;
derision: min;
ms3: never;
occupation: 9999;
latitude : 48;
longitude : -4.1;
competent: none !important;
}

documentation MS2 / F.A.Q. / Contribes FR / Contribes US
Go to the top of the page
 
sykaflex
posté 13 Mar 2009, 00:41
Message #9


Ceinture marron OSC
Icône de groupe

Groupe : Membres
Messages : 1335
Inscrit : 12-July 08
Lieu : aux Açores au milieu de l'atlantique
Membre no 22434



Citation
CONTRIBUTIONS

Installez SEULEMENT celles que vous devez utiliser et SEULEMENT celles qui vont faire gagner du temps ou ajouter de la valeur au processus d’achat. Les contributions répondant à ces critères dépendent de votre type de boutique et des produits que vous vendez. Toute contribution est consommatrice de ressource, que ce soit du code PHP pur ou bien des requêtes MySQL (ou les deux). Règle d’or : N’INSTALLEZ QUE LE NOMBRE MINIMUM DE CONTRIBUTIONS. Trop souvent, un propriétaire de magasin devient fou de contributions wub.gif 'males ou femelles ? mrgreen.gif et installe tous les gadgets possibles angry.gif il faudrait censurer, ca dérape ! mrgreen.gif . Ceci fait considérablement gonfler la base de code et les performances en souffrent... l'intention est d’améliorer le processus d'achat mais l'effet est de le DÉGRADER en raison de la lenteur de chargement.
ils sont vraiment minimalistes ces anglophones ! Hello, I cash your money, thanks, goodbye , et qu'est-ce qu'on va raconter sur le forum si il n'y a plus les contribs mrgreen.gif
bon post idées intéressantes OK pour l'optimisation ... mais d'abord du porte monnaie de nos clients parce que vu qu'ils n'ont plus de tunes ils ont le temps de ramer !


--------------------
entre chats : chat affamé cherche chat pelure pour faire sauter chat perché dans poil de chat (allergiques s'abstenir)

ah oui ... osCommerce v2.2 RC1 french by Delaballe "merci à lui" - PHP version 4.4.8 - mysql5-41 - OVH 240Plan - contribs : (entre autre) AJAX-AttributeManager-V2.8.2 - Limit_Countries - Multi-Product Update v1.00 - Quick Updates 2.7 - Individual Product Shipping Prices - v1_0 - Attribute Qty Product Info - user_tracking_1 - Visitor Web Stats 3.2.1 - Sort Order - image_subdirectories - master password v1.4 - virementbancaire1.4 - Welcome_Email_password ...
"et grand merci à tous les contributionneurs"
Go to the top of the page
 
Phocea
posté 13 Mar 2009, 11:03
Message #10


Ceinture marron OSC
Icône de groupe

Groupe : Membres
Messages : 1448
Inscrit : 12-March 05
Lieu : Chuiche
Membre no 5120



Citation (mosaic @ 13 Mar 2009, 01:09) *
en appliquant un index sur sesskey, voilà ce dont m'informe phpMyadmin :

La colonne `sesskey` ne devrait pas faire partie à la fois d'une clé primaire et d'une clé index


Pas bien grave Mosaic. Une clef primaire bénéficie automatiquement de son propre index
Go to the top of the page
 

Reply to this topicStart new topic
1 utilisateur(s) sur ce sujet (1 invité(s) et 0 utilisateur(s) anonyme(s))
0 membre(s) :

 



RSS Version bas débit Nous sommes le : 28th March 2024 - 17:44
Ce site est déclaré auprès de la commision Nationale
de l'Informatique et des Libertés (déclaration n°: 1043896)