Comment j'ai ralenti MenzoNet sans le vouloir
Ça faisait quelque temps que ça me gossait, comme on aime si-bien dire en québécois.. La page principale prenait 0.33sec à se générer lorsque toutes les conditions était de notre côté pour que ce soit rapide. J'avais l'impression que c'était quelque chose de mal configuré et j'avais beau chercher, je ne trouvais pas.
Voici sommairement ma démarche pour trouver le coupable et rendre le site presque 7x plus rapide!
J'ai commencé, hier, par faire journaliser tous les évènements de PHP. J'avais des avertissements que telle constante n'était pas déclarée, que telle variable n'était pas déclarée.. j'ai donc pris quelque temps pour éliminer bien des avertissements de ce genre pour me rendre compte que j'avais aucun impact sur la vitesse du rendu.
En cherchant comment optimiser PHP, je suis tombé sur un article parlant de XDebug. Je me suis donc fait une petite configuration de XDebug dans /etc/php.ini, j'ai fait faire un profil de la page d'Index.
J'ai ensuite utilisé WebGrind pour analyser les résultats.
WebGrind a cette gentille fonctionnalité où il classe les lignes de code par temps d'exécution. Il m'a listé une ligne de code faisant une simple requête SQL comptant les commentaires associés à un blog. En ouvrant une ligne de commande MySQL, j'ai pus confirmer que cette requête, à l'extérieur de PHP, prenait 0.03sec à être traitée. Comme cette requête est appelée 10 fois dans la page d'accueil, ça fait donc 0.3 sec perdu sur cette requête. J'ai donc trouvé mon coupable.. c'est dans MySQL!
J'ai regardé la structure de ma table. Il y a quelque temps, j'avais joué avec les partitions dans les tables SQL. La table des commentaires est partitionnée... J'ai désactivé le partitionnement temporairement sur cette table, question de voir les effets. Je viens de sauver 0.25sec sur la page principale! J'ai donc désactivé le partitionnement sur les autres tables!
Dire que j'avais fait ça pour accélérer le rendu des pages...
Écrit le: 25/01/2013 @ 19:06
L'enfer est pavé de bonnes intentions. En plus il va toujours y avoir un vieux con quelque part pour te dire que si ca marche faut surtout pas y toucher. Moi je pense que si on expérimente pas avec son code ou avec ses machines on apprend rien et quand la catastrophe arrive c'est la panique générale.