Conseils d'optimisation

  • Principes généraux


    Concentrez vos efforts d'optimisation sur les pages les plus fréquentées (déterminées grâce aux statistiques). Il est plus utile de gagner 1 seconde sur une page vue 10000 fois par jour que 10 secondes sur une page vue une fois par semaine.
  • Mieux vaut une page statique, en HTML, qu'une page générée dynamiquement en PHP, Perl, C, Python etc...
    Avant de développer une page, posez-vous donc systématiquement la question : "ai-je besoin de rendre cette page dynamique ?".
    Si une page identique pour tous vos visiteurs peut convenir, faites une page statique.
    Si une page changeant chaque heure ou chaque jour peut suffire, utilisez un "cron" pour générer une page statique une fois par heure ou par jour.
    Par exemple pour générer une page html à partir d'un script PHP une fois par jour à 3h02 du matin, mettez la ligne suivante dans votre crontab :
    2 3 * * * /usr/local/bin/php -q /home/votresite/www/votrescript.php > /home/votresite/www/votrepage.html

    Pour générer une page HTML à partir d'un script Perl une fois par heure à 1H07, 2H07, etc..., mettez la ligne suivante dans votre crontab :
    6 * * * * /usr/bin/perl /home/votresite/progs/votreprogramme.pl > /home/votresite/www/votrepage.html

     

  • Mieux vaut une page en un seul tenant qu'une page avec plusieurs frames ou inclusions
    Le lancement de chaque script ou la recherche de chaque page statique sur le disque prend un temps incompressible, quelle que soit la rapidité de votre script ou la légèreté de votre fichier. Multiplier le nombre de scripts/fichiers nécessaire à l'affichage d'une seule page multiplie ce temps incompressible. Ce n'est pas très génant sur une page peu visitée. Mais si une page très fréquentée nécessite 1 frameset, 3 frames, que chaque frame est un script PHP nécessitant 4 inclusions de fichiers, il faut 1+3+4x3=15 fichiers, dont 3 scripts PHP à lancer !
    Certes les inclusions en PHP ou Perl sont très pratique par exemple pour utiliser un entête ou un pied de page commun à toutes les pages du site. Si vous avez besoin de cette technique pour développer plus facilement, utilisez-la, mais en la combinant si possible avec la fabrication périodiques de pages statiques pour vos pages les plus visitées. Vous aurez ainsi à la fois la facilité de développement et la performance pour l'utilisateur.

     

  • Optimisation MySQL :


    Utilisez le moins de requêtes possibles, ne faites pas en 3 requêtes ce que vous pourriez faire en une seule. Pour cela, étudiez en particulier les jointures. En effet, il y a là encore un temps incompressible pour chaque requête, quelle que soit l'optimisation de votre requête, et en multipliant le nombre de requêtes vous multipliez ce temps.
    - Mettez des index sur les champs de vos tables utilisés comme critères de recherche.
    - Utilisez "=" dans vos requêtes plutôt que "LIKE", qui ne permet pas de profiter de la rapidité des index.
    - Pour compter le nombre de réponses, utilisez "select count(*) from table" plutôt que "select * from table".
    - Nettoyez périodiquement vos tables des vieux enregistrements devenus inutiles.
    - Utilisez l'instruction EXPLAIN pour optimiser vos reqûetes.
    - Etudiez le chapitre 5 de la documentation de MySQL.

     

  • Optimisation des scripts :


    Dans l'ordre, voici les langages des plus rapides au plus lent :
    C > PHP > Perl > PHP en mode CGI.
    Malgré ce classement, un script bien programmé dans un langage lent sera toujours plus rapide qu'un script mal programmé dans un langage rapide (excepté le PHP en mode CGI qui est vraiment très lent).
    Ne perdez également pas votre temps à programmer une page très peu utilisée en C. Et évitez plus que tout de mettre votre page la plus visitée en PHP mode CGI.

     

  • Optimisation des images :


    Il n'y a pas de format d'image idéal, chaque format a ses avantages et ses inconvénients.
    Utilisez le format JPEG pour les photos (le PNG serait trop lourd), le format PNG pour les logos et dessins (le JPEG abimerait ces images).
    Le GIF est dépassé technologiquement, son rôle était le même que le PNG. Tous les navigateurs à partir des versions 4 acceptent le PNG sauf Internet Explorer 4.5 pour Mac OS.
    Il reste encore utile pour les images animées.
    Le format PNG est un format basé sur une palette de couleurs. Il n'est pas nécessaire d'utiliser une palette de 16 millions de couleurs pour du texte monochrome, réduisez la taille de la palette au nombre de couleurs nécessaire à votre image. 8 couleurs suffisent par exemple pour du texte monochrome antialiasé.
    Sachez également que Gimp produit toujours des images un peu plus légères que Photoshop.

     

  • Optimisation des pages statiques :


    Evitez de faire vos pages Web avec Word ou Frontpage si elles sont très fréquentées, le code produit est éléphantesque. Il n'y a pas de code plus léger que le code produit à la main avec un éditeur de texte ou un éditeur de code HTML. Apprendre le HTML est très facile, contrairement aux idées préconçues : il ne s'agit pas d'un langage de programmation, mais d'un langage de description de page. Utiliser un éditeur HTML graphique (ou WYSIWYG) est un moindre mal. Le composeur du navigateur Mozilla est gratuit et simple d'usage, et produit un code propre.
    Utilisez également des feuilles de style CSS pour partager une mise en forme commune à toutes vos pages sans surcharger celles-ci.


  • Mesure du poids de vos pages


    Nous proposons un service gratuit et très rapide pour évaluer le poids de vos pages(et aussi diverses optimisations). A utiliser sans modération !


  • Compression dynamique des pages :


    Toutes les pages statiques ou dynamiques sont compressées en gzip si le navigateur du visiteur le supporte. Une page HTML sans image de 40Ko qui prendrait 10 secondes à un modem RTC est réduite à 4Ko, soit une seconde seulement.
    Il est donc inutile d'implémenter ce mécanisme dans vos pages/scripts. Par contre vous pouvez placer une copie précompressées des pages statiques dans le même répertoire pour permettre au serveur d'économiser le temps de compression. Par ex. index.html.gz à côté de in