Jump to content

Voici des indices pour m'aider à éliminer la lenteur en 1.5


Recommended Posts

Bonsoir à tou(te)s,

 

Je bataille depuis des mois pour comprendre la lenteur localisée de ma boutique (1.5.4.1 avec toutes optimisations activées, et fonctionnant avec le nouveau système de stockage des images -ce qui n'influe aucunement sur ce pb-).

 

C'est une ancienne boutique 1.2 qui a été mise à jour petit à petit et qui au fur et à mesure du temps est devenue de plus en plus lente. Maintenant sur certaines requêtes on est à > 30s.

 

J'ai déjà essayé de changer d'hébergeur. Sans succès. Je suis maintenant en virtualisé sur lequel je n'ai aucun autre site qui mange des ressources.

 

Voici des indices permettant peut-être à "ceux qui savent" de mettre le doigt sur le problème :

 

- Je navigue par catégorie, et je suis en mode maintenance donc quasi seul sur le site

 

- Le temps de réponse est pas exceptionnel mais normal sauf pour une sous-sous-catégorie qui met pas moins de 30 sec (si si) à ce que la premier GET daigne répondre (mesuré avec firebug).

 

- Si j'essaye d'afficher une catégorie parente de la sous-sous-catégorie dont je parle, la même lenteur est présente également.

 

- La sous-sous-catégorie dont je parle ne comporte que 39 produits, dont 1 désactivé.

 

- Une autre catégorie du même site comportant 106 produits actifs s'affiche en 1 à 2 sec maxi.

 

- Lors d'une recherche, parfois c'est quasi instantané, parfois c'est inadmissiblement long aussi. Je suppose que c'est long lorsqu'un produit de cette fameuse sous-sous-catégorie est inclus dans les résultats, mais je ne l'ai pas encore rationnellement vérifié.

 

Avez-vous déjà des idées les amis ? :mellow:

 

Je me tiens à votre disposition pour essayer une chose ou une autre.

Et je reviens poster ici dès que j'ai de nouveaux indices ou une piste de résolution.

 

D'avance merci.

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

Salut,

 

Je remarque autre chose. Ces 38 produits dans cette catégorie qui met bien 30 sec à s'afficher en front office ont une particularité : ils ont beaucoup de déclinaisons.

 

Faut-il creuser cette piste ?

 

Hélas ces déclinaisons reflètent la réalité de l'offre et sont donc indispensables. Peut-on faire autrement pour que ça aille plus vite ? Est-ce vraiment la bonne piste ?

 

Merci de vos éclairages.

Link to comment
Share on other sites

Euh he suis en back office, et parfois, sur certains desdits produits, lorsque j'essaye d'afficher les déclinaisons, ça met vraiment 3 plombes, et ça me dit parfois :

"Certain onglets n'ont pas été chargés correctement, voulez-vous les recharger ?"

En boucle.

 

Est-ce que quelqu'un pourrait m'expliquer pourquoi ?!

Link to comment
Share on other sites

Je pense que c'est bien un nombre de déclinaisons excessif.

 

Y aurait-il un maximum conseillé de déclinaisons par produit à ne pas dépasser ?

Ou bien un moyen que ce nombre de déclinaisons ne soient recherchées qu'au moment d'afficher le produit, et non pas sa catégorie ou une liste de produits ?

Y aurait-il un moyen de s'y prendre autrement pour faire moins de déclinaisons ? Est-ce que faire plusieurs produits serait réellement rentable (fastidieux oui) ?

 

Si quelqu'un a un peu de lumière, je prends !

 

Merci.

Michel.

Link to comment
Share on other sites

  • 2 months later...

Bonjour, 

 

J'ai le même problème.

 

J'ai une catégorie qui ne contient quasiment que des produits avec déclinaisons (environ 60 la plupart entre 800 et 1300 déclinaisons) et qui charge en 15s.

A côté j'ai des catégories avec à peu près le même nombre de produits qui chargent en 3.5s.

 

Donc je soupçonne aussi les déclinaisons... <_<  et j'aimerai bien trouver la solution parce qu'en attendant, j'ai dû arrêter d'ajouter des produits...  :angry:

 

Enfin, si vous avez des réponses ou déjà fait des test, ça m'intéresse! 

 

Merci!

 

 

version 1.5.4.1; modules stats désinstalés et grand ménage côté front ; site adulte, j'évite de mettre un lien...

Link to comment
Share on other sites

Salut,

 

Je confirme pour les déclinaisons. J'ai passé un paquet de déclinaisons en personnalisations. En tous cas celles qui n'ont pas d'influence sur le prix bien entendu. Les temps de chargement ont considérablement baissé. C'est juste hyper pénible à faire.

 

Du coup soit tu peux, et tu fais, de mettre moins, mais genre beaucoup moins, de déclinaisons, soit tu utilises un système de déclinaisons autre que celui de prestashop, un module payant, dont je n'ai plus le nom, mais dont j'ai lu que parait-il c'est le bonheur quand on ne peut pas faire autrement...

 

Par ailleurs, mais là je suis hors sujet, compare les temps de chargements d'une même page avec APC ou MemCached activé d'une part et sans système de cache d'autre part. J'ai remarqué que sans, des fois ça charge plus vite. Je ne dis pas que c'est normal, je te dis juste tout ce que j'ai pu constater, des fois que cela aide...

 

Mais dans ton cas, à mon avis ce sont bien les déclinaisons le pb, et hélas ça chiffre vite.

 

Bon courage.

Michel.

Link to comment
Share on other sites

Pour le cache, c'est déjà comparé -> à la moindre modification de mon thème, de fonctionnalités ou des modules, je le vide. Sinon en effet le site rame plus que quand il est désactivé. C'est aussi ce que j'ai pu constater... et au final même quand ça marche le gain est pas énorme (mais bon à prendre).

 

Pour la personnalisation, la plupart de mes déclinaisons sont des couleurs et je doute un peu de la motivation des clients pour écrire alors qu'ils peuvent cliquer sur la couleur ailleurs sur le web. Mais c'est une piste.

 

Du coup, je continue à fouiller, mais j'ai encore du mal avec php.

 

On va bien finir par trouver.

 

 

Merci.

Bonne soirée.

Link to comment
Share on other sites

Je voudrais essayer de te faire gagner du temps, car moi aussi c'était pour des couleurs entre autres.

 

Donc faut adapter pour ton thème, mais j'ai bidouillé ainsi :

 

Dans product.tpl j'ai mis un include :

                {if $product->text_fields|intval}
                <div class="customizableProductsText">
                    <h3>{l s='Text'}</h3>
                    <ul id="text_fields">
                    {counter start=0 assign='customizationField'}
                    {foreach from=$customizationFields item='field' name='customizationFields'}
                        {if $field.type == 1}
                        <li class="customizationUploadLine{if $field.required} required{/if}">
                            <label for ="textField{$customizationField}">{assign var='key' value='textFields_'|cat:$product->id|cat:'_'|cat:$field.id_customization_field} {if !empty($field.name)}{$field.name}{/if}{if $field.required}<sup>*</sup>{/if}</label>
                            {include file="$tpl_dir./product_perso.tpl"}
                        </li>
                        {counter}
                        {/if}
                    {/foreach}
                    </ul>
                </div>
                {/if}

Et ce fichier là se compose ainsi (c'est lourd, mais c'est dans mes cordes niveau php) :

{assign var='perso_couleurCordonPT' value=','|explode:"Noir,Taupe,Marron,Orange,Rouge,Bordeaux,Rose Fushia,Rose Clair,Violet,Vert Anis,Vert d'Eau,Bleu Jean,Bleu Ciel,Girs,Blanc" }
{assign var='perso_couleurCuirPT' value=','|explode:"Noir,Gris,Marron,Gold,Bleu,Rouge,Orange,Blanc,Rose" }

{if substr($field.name, 0, 14) == "Couleur cordon"}
  <select name="textField{$field.id_customization_field}">
    {foreach from=$perso_couleurCordonPT item='item'}
          <option value="{$item}" {if isset($textFields.$key)}{if $textFields.$key == {$item[spam-filter]selected="selected"{/if}{/if}>{$item}</option>
    {/foreach}
  </select>
 
{elseif substr($field.name, 0, 12) == "Couleur cuir"}
  <select name="textField{$field.id_customization_field}">
    {foreach from=$perso_couleurCuirPT item='item'}
          <option value="{$item}" {if isset($textFields.$key)}{if $textFields.$key == {$item[spam-filter]selected="selected"{/if}{/if}>{$item}</option>
    {/foreach}
  </select>

(...)

Tu vois l'idée ?

Si ça peut te servir. Je m'étais inspiré d'un post sur le forum presta, je ne sais plus où.

 

Du coup dans la tab Personnalisation du produit, tu as bien une liste déroulante comme par exemple là.

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

Je bataille depuis des mois pour comprendre la lenteur localisée de ma boutique

 

Bonjour,

 

Idem, je bataille également depuis des mois pour comprendre la lenteur de ma boutique depuis le passage en 1.5.

De mon côté, la lenteur n'est pas vraiment localisée mais plutôt générale.

J'ai tenté de voir plusieurs fois avec OVH s'il s'agissait des perfos du serveur mutualisé mais visiblement non.

 

J'ai obtenu une info supplémentaire aujourd'hui.

Il semblerait que certaines requêtes SQL écroulent mes perfos. Voici les deux plus dimensionnantes :

# User@Host: ********db2[********db2] @  [10.0.103.17] # Query_time: 7.457478  Lock_time: 0.064126 Rows_sent: 1  Rows_examined: 2 use ********db2; SET timestamp=1381998344; 
SELECT *, ( IF ('2013-10-17 10:25:36' >= `from` AND '2013-10-17 10:25:36' <= `to`, 1, 0) +  IF (`id_group` = 4, 2, 0) +  IF (`id_country` = 8, 4, 0) +  IF (`id_currency` = 1, 8, 0) +  IF (`id_shop` = 1, 16, 0) +  IF (`id_customer` = 0, 32, 0)) AS `score`

                                FROM `ps_specific_price`

                                WHERE `id_product` IN (0, 186)

                                AND `id_product_attribute` IN (0, 0)

                                AND `id_shop` IN (0, 1)

                                AND `id_currency` IN (0, 1)

                                AND `id_country` IN (0, 8)

                                AND `id_group` IN (0, 4)

                                AND `id_customer` IN (0, 0)

# User@Host: ********db2[********db2] @  [10.0.103.17] # Query_time: 13.348184  Lock_time: 2.785245 Rows_sent: 1  Rows_examined: 2 use ********db2; SET timestamp=1381997823; 
SELECT `id_guest`

                                FROM `ps_connections`

                                WHERE `id_guest` = 29559

                                        AND DATE_ADD(`date_add`, INTERVAL 30 MINUTE) > '2013-10-17 10:16:00'

                                         AND id_shop IN (1)

                                ORDER BY `date_add` DESC LIMIT 1;

N'étant pas un expert en info, mon problème est maintenant d'identifier les modules ou fonctions qui génèrent ces requêtes...

Est-ce que quelqu'un à une idée à la lecture de celles-ci ?

 

Merci d'avance pour votre aide

 

Augustin

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

Bonjour,

 

Idem, je bataille également depuis des mois pour comprendre la lenteur de ma boutique depuis le passage en 1.5.

De mon côté, la lenteur n'est pas vraiment localisée mais plutôt générale.

J'ai tenté de voir plusieurs fois avec OVH s'il s'agissait des perfos du serveur mutualisé mais visiblement non.

 

J'ai obtenu une info supplémentaire aujourd'hui.

Il semblerait que certaines requêtes SQL écroulent mes perfos. Voici les deux plus dimensionnantes :

# User@Host: ********db2[********db2] @  [10.0.103.17] # Query_time: 7.457478  Lock_time: 0.064126 Rows_sent: 1  Rows_examined: 2 use ********db2; SET timestamp=1381998344; 
SELECT *, ( IF ('2013-10-17 10:25:36' >= `from` AND '2013-10-17 10:25:36' <= `to`, 1, 0) +  IF (`id_group` = 4, 2, 0) +  IF (`id_country` = 8, 4, 0) +  IF (`id_currency` = 1, 8, 0) +  IF (`id_shop` = 1, 16, 0) +  IF (`id_customer` = 0, 32, 0)) AS `score`

                                FROM `ps_specific_price`

                                WHERE `id_product` IN (0, 186)

                                AND `id_product_attribute` IN (0, 0)

                                AND `id_shop` IN (0, 1)

                                AND `id_currency` IN (0, 1)

                                AND `id_country` IN (0, 8)

                                AND `id_group` IN (0, 4)

                                AND `id_customer` IN (0, 0)

# User@Host: ********db2[********db2] @  [10.0.103.17] # Query_time: 13.348184  Lock_time: 2.785245 Rows_sent: 1  Rows_examined: 2 use ********db2; SET timestamp=1381997823; 
SELECT `id_guest`

                                FROM `ps_connections`

                                WHERE `id_guest` = 29559

                                        AND DATE_ADD(`date_add`, INTERVAL 30 MINUTE) > '2013-10-17 10:16:00'

                                         AND id_shop IN (1)

                                ORDER BY `date_add` DESC LIMIT 1;

N'étant pas un expert en info, mon problème est maintenant d'identifier les modules ou fonctions qui génèrent ces requêtes...

Est-ce que quelqu'un à une idée à la lecture de celles-ci ?

 

Merci d'avance pour votre aide

 

Augustin

 

Bonjour,

 

vu ce test:

 

http://www.webpagetest.org/result/131025_GJ_6PW/1/details/

 

Manque beaucoup de fichiers css, pas de CCC activé.

 

le TTFB est un peu élevé, environ 3.3 sec mais il y a bien pire chez ovh en mutu.

 

problème de requête sur le favicon.

 

tracking-shop-flux est super long à répondre, 13 secondes.

 

quand vous aurez résolu tout ça vous pourrez vous attaquer au tripotage des SQL etc...

  • Like 1
Link to comment
Share on other sites

Bonjour, 

 

@micheldmo

Cool, j'avais pas vu les personnalisations sous cet angle. Et vu comme ça, aucun problème ni pour les clients ni pour les temps de chargement. Merci pour le code ça va vraiment me faire gagner du temps parce que côté php je me noie... Faut que j'adapte un peu, mais pas beaucoup: en fait c'est vraiment le même problème qu'on rencontre!

 

Question indiscrète: tu as quoi comme hébergement? Le temps de réponse serveur est pas mal chez toi!

 

@aquaticam

 

D'abord deux questions:

1- Comment as-tu fais pour voir ces requêtes?? (c'est peut-être logique mais je sais pas faire et ça m'intéresse!)

2- C'est sur quelle page?

Je pose la question parce que je vois 

 

 

AND `id_product_attribute` IN (0, 0)

 

C'est un peu le fond de mon problème...

 

Par contre pour toi, je crois qu'un peu de ménage s'impose: sur ta page d'accueil

-une redirection

-104 requêtes

-poids de la page 1.2Mb (énorme!pour comparaison chez moi c'est 550kb et 23 requêtes)

-et des erreurs de connections (timeout probablement cause poids de la page et trop de requêtes)

Le temps de réponse du serveur est pas si énorme au final...  ^_^

 

 

Répondu un peu tard j'avais pas vu la réponse de lechapelier...

Edited by pierre f (see edit history)
  • Like 1
Link to comment
Share on other sites

Bonjour, 

 

As-tu testé ton code avec les champs requis? Chez moi ça ne marche pas... j'ai le message d'erreur "veuillez remplir tous les champs puis enregistrer votre personnalisation".

 

Si les champs ne sont pas requis, là par contre ça marche : pas de message d'erreur et les options se retrouvent dans le panier.  :huh:

 

Je fouille mais... une idée?

Link to comment
Share on other sites

Trouvé, 

 

Un petit rajout pour la balise option:

<option value="{$item}" id="textField{$customizationField}"{if isset($textFields.$key)}{if $textFields.$key == {$item[spam-filter] selected="selected"{/if}{/if}>{$item}</option>

Merci encore!

Link to comment
Share on other sites

Merci Pierre et LeChapelier pour vos éléments de réponse.

 

J'ai commencé à faire un peu de ménage dans les CSS et c'est déjà un peu mieux.

 

> Pierre : ces requêtes m'ont été fournies par mon hébergeur quand je leur ai demandé d'où venait les temps de réponse très longs.
Du coup je ne sais pas vraiment t'en dire plus sur le moyen de les obtenir.

 

Par contre comment faire pour diminuer le nombre de requête en page d'accueil ?

Je n'ai pas beaucoup de modules qui tournent sur cette page pourtant....

Link to comment
Share on other sites

Bonjour,

 

vu ce test:

 

http://www.webpagetest.org/result/131025_GJ_6PW/1/details/

 

Manque beaucoup de fichiers css, pas de CCC activé.

 

le TTFB est un peu élevé, environ 3.3 sec mais il y a bien pire chez ovh en mutu.

 

problème de requête sur le favicon.

 

tracking-shop-flux est super long à répondre, 13 secondes.

 

quand vous aurez résolu tout ça vous pourrez vous attaquer au tripotage des SQL etc...

 

Bonjour Lechapelier,

 

C'est bizarre car j'ai bien activé tous les CCC (feuille de style, javascript,....).

Où est-ce que vous voyez dans le résultat que je n'ai pas de compression de cache ?

 

Merci

Link to comment
Share on other sites

C'est beaucoup mieux maintenant, moins le lignes css et plus de 404 sauf favicon, vous avez fait un bon coup de ménage.

 

je sais pas si vous bidouillez en ce moments mais mes test sont à chaque fois différent...

 

En tout cas le ttfb est en moyenne à 4 secondes.

 

Par contre les 3 x 301 au début faudrait régler ça.

 

Il ne devrait avoir que 2-3 lignes de css et idem en js, vous devez utiliser des modules complémentaires, m'enfin ce n'est pas très grave ce n'est pas le plus lourd.

 

le start render est à 5.5 sec dont 4 sec de ttfb sur lequel vous ne pouvez rien faire à part changer de serveur.

 

C'est déjà bien optimisé, faut encore pousser un peu sur les images, les 14 premières:

 

http://www.webpagetest.org/result/131101_JY_D3D/1/performance_optimization/#compress_images

 

Vous avez beaucoup d'images, un cdn serait pas du luxe mais surtout un serveur moins surchargé car maintenant c'est lui qui vous met dans le jus et un 1er nov à 10h il doit pas être surchargé alors à 21h il doit rajouter une poignées de secondes en délai de réponse.

 

Correctement optimisé ça devrait ressembler à ça avec un peu plus d'images bien sûr:

 

http://www.webpagetest.org/result/131101_SH_D70/1/details/

 

le plus long sur mutu c'est toujours ce foutu ttfb...

Link to comment
Share on other sites

Bonjour, 

 

Désolé -> vacances!

 

Quelques pistes rapides: 

 

Le ccc c'est bien mais virer l'appel aux fichiers css dans les modules pour tout replacer dans global.css et activer ccc c'est mieux.

Un petit gain, mais peu de boulot...  :ph34r:

 

Une pierre, deux coups: pour tous les petits éléments graphiques fixes faire le tour de ses pages avec le script de sprite-me.org (par exemple) et faire un ou des sprites que tu pourra en plus alléger avec smush-it ou tinypng (par exemple).

 

 

Pour le chapelier: ui ui on peut faire un peu baisser le temps de réponse... moins on a de requêtes mieux on se porte.

Un exemple: ton footer est présent sur toutes les pages, et à chaque fois que tu appelles une page il va chercher l'url des liens qui sont dessus dans la base... C'est bête, ça pourrait être écrit en dur comme 70-80% des éléments fixes du site. Et pour l'utilisation, avec un éditeur de texte et un client ftp tu ajoutes ou retire tes liens en 30 secondes.

Tout ça pour dire que je suis passé de 5s à 2s (8 à 3 en heure de pointe) avec ce genre de bidouilles, et ça vaut le coup pour la navigation du client. :rolleyes:

 

Et maintenant je te rejoins: ça reste du mutu avec ses limites et ça vaudra jamais un dédié ou un vps.  :)

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