Grouper les fichiers pour gagner en vitesse

Dans mon premier billet sur l'optimisation de site Web j'évoquais la possibilité d'utiliser un script pour servir plusieurs fichiers Javascript (ou CSS) d'un coup pour gagner en vitesse. Voici un petit exemple de script PHP pour réaliser ce type de regroupement à la volée :

header('Cache-Control: max-age=3600, must-revalidate');
header('Content-type: text/javascript');
ob_start('ob_gzhandler');
if ($_REQUEST['f'])
{ $tab=explode(' ',trim($_REQUEST['f']));
foreach ($tab as $file)
if (preg_match('/^([0-9a-z_\-]+\/)*[0-9a-z_\-]+\.js$/i',$file)) readfile($file);
}

Le script est supposé être installé dans le répertoire où se trouvent les fichiers Javascript à servir. Ainsi, si vous avez 3 fichiers à regrouper ensemble vous pourriez utiliser une seule ligne HTML de la sorte :

<script src="/javascripts/script.php?f=file1.js+file2.js+file3.js" type="text/javascript"></script>

Quelques mots sur le code :

  1. La sortie est compressée avec ob_gzhandler. Ceci permet typiquement un gain de taille de 50 à 75% ce qui donne autant de temps gagné (et accessoirement de bande passante).
  2. Par sécurité, le paramètre d'entrée est vérifié pour n'autoriser que les fichiers .js.
  3. Des en-têtes HTTP sont rajoutés pour envoyer le bon type de fichier MIME ainsi qu'indiquer au navigateur de garder le résultat dans son cache pendant 1 heure (3600 secondes), permettant par là encore un gain de vitesse.

Il se trouve que Rakaz explore et développe la même idée, mais lui va plus loin en utilisant mod_rewrite pour présenter une URL plus lisible et qui cache le script de groupage.

0 commentaire sur ce billet.