Comment se répartit le temps de construction d'une page web ? - Conseil sur le code PHP

Conseil sur le code PHP

Conseil sur le code PHP

Comment se répartit le temps de construction d'une page web ?

Le temps de chargement d'une page web est un facteur de qualité pour le référencement. Logiquement, une page qui se chargera rapidement sera mieux placée qu'une page complexe et donc plus lente à fabriquer.

Par conséquent, la construction d'une page nécessite de réfléchir aux différents processus nécessaires ainsi qu'à leur optimisation. Il est souvent mentionné sur internet que les requêtes aux bases de données consomment la plus grande part des ressources d'un serveur web.

Dans cet article, différentes méthodes d'optimisations seront testées ainsi que leurs effets sur le temps de création de la page.

Test avec une page classique


Procédure et résultats

Cet exemple s'appuie sur la construction d'une page web classique avec le langage de scripts PHP et une base de données MySQL (le pilote utilisé est MySQLi) comprenant plusieurs parties :
- la connexion à la base de données,
- l'affichage du début du menu,
- une requête à la base de données pour afficher le menu,
- l'affichage de la requête grâce à une boucle (30 tours),
- l'affichage de la fin du menu et du début de la page,
- une requête à la base de données pour afficher le contenu principal de la page,
- l'affichage de la requête grâce à une boucle (16 tours),
- l'affichage de la fin de la page.

Le temps nécessaire à chaque étape est calculé et permet de définir le temps global à construire la page.

Les différentes optimisations sont testées successivement sans enlever la précédente :
- rafraîchissement de la page (les requêtes sont mises en cache par MySQL),
- mise en place de l'extension Alternative PHP Cache (APC) qui pré-compile le code intermédiaire et le place dans un cache,
- changement de la méthode d'accès la base de données (style procédural au lieu du style objet)
- mise en cache du code HTML de la page et insertion dans la page même,
- mise en cache du code HTML de la page et insertion dans un fichier externe lu avec la fonction readfile().

Les résultats sont donnés en secondes. Chaque couleur représente une étape.

Temps de chargement d'une page classique

Les données de la 1ère colonne masque les différences des autres résultats. Le détail ci-dessous permet de mieux constater les écarts de vitesse.

Temps détaillés de chargement d'une page classique
Conclusions

La requête du contenu prend ici énormément de temps mais elle intervient finalement peu souvent un serveur web car les requêtes répétitives sont mises en cache.

La mise en cache classique de la requête MySQL permet déjà de réduire d'un facteur 25 le temps de chargement de la page.

Globalement, les performances générales sont grandement améliorées par l'utilisation d'un cache. L'installation d'Alternative PHP Cache (APC) permet de gagner encore plus de temps (réduction d'un facteur 40). On peut également noter que le style de codage pour le pilote MySQLi (procédural ou objet) ne modifie que très légèrement le temps de construction de la page.

La mise en cache du code HTML permet enfin de diminuer le temps d'un facteur 120 par rapport à une requête classique.

Les 2 dernières colonnes montrent un gain de temps appréciable car il n'effectue aucune requête à la base de données. Naturellement la lecture d'un fichier externe nécessite un léger surplus de temps.

Test avec une page de liste


Procédure et résultats

L'exemple suivant reprend la même page mais la partie du contenu est beaucoup plus longue et la requête renvoit 1 000 résultats ce qui nécessite 1 000 tours de boucle.

Temps de chargement d'une page de liste

Conclusions

Les conclusions précédentes se retrouvent ici mais la différence est moins flagrante car le poids de la page devient ici non négligeable (18 ko pour la page classique contre 60 ko pour la page de liste).

Le temps nécessaire est ici divisé par 10.

Conclusions générales


Globalement, les différentes méthodes de cache permettent de soulager grandement le serveur.

Les requêtes aux bases de données demandent le plus de ressources lors de la construction d'une page lorsqu'elles sont peu fréquentes (sinon elles sont mises en cache par MySQL).

L'affichage des résultats d'une requête est un élément non négligeable à prendre en compte dans le temps de chargement car il demande souvent autant voir plus de temps que la requête en elle-même.

L'utilisation d'un cache en dur est l'optimisation la plus efficace mais l'intervalle de temps entre 2 actualisations du cache de la page devient un élément à considérer.

Les autres astuces du même thème :

Quelle fonction de recherche textuelle est la plus rapide ?

Comment se répartit le temps de construction d'une page web ?

Thèmes


Conseil php

Contact - Règles de confidentialité