Faut-il minifier une concaténation de code minifié ?

À travers cet article portant fièrement un titre chinois pour les non-initiés au développement web, nous allons voir s'il faut fournir du code minifié à UglifyJS pour qu'il produise son propre code minifié.

La minification pour les nuls :

Chaque développeur web un peu soucieux des performances de son site, va tout d'abord minifier ses scripts JavaScript. Cela consiste à enlever tout ce qui est inutile pour la machine (espaces blancs, commentaires, etc.) mais utile pour l'homme qui confectionne ce code avec amour. Cela permet de réduire la taille des fichiers et d'accélérer le chargement des sites web. De plus il peut les concaténer (les ajouter bout à bout) afin de réduire le nombre de requêtes HTTP ce qui aura pour conséquence d'accélérer encore une fois le chargement du site par le visiteur.

Un petit benchmark

J'ai donc fait un petit script pour mettre tout le monde d'accord : (les librairies choisies sont un pur hasard)

La méthode minify d'Uglify permet de minifier et de "mangler" (raccourcit le nom des variables) le code. Comme je passe un array en argument, il va s'occuper de concaténer tous les scripts tout seul comme un grand pour ne donner qu'un seul fichier.

Et en output, j'obtiens donc :

1
Compressed: 728144 / Uncompressed: 738180 | 0.986% (40.2s)
WTF!? Je m'attendais à une différence négligeable mais, en faveur du non compressé. Or ici Uglify produit un code plus court si on lui fournit du code minifié. C'est...étrange...

Bref vous avez perdu votre temps à lire ça ;-)

Le résultat est à mon goût négligeable donc inutile de changer vos pratiques. De plus il est fort probable que ce résultat varie en fonction des cas.

Rassurez vous, je ne suis pas encore assez fou pour avoir ce genre d'idée seul, remercions plutôt @nhoizey : (et @madsgraphics pour ses suppositions)
tweet de nhoizey

Sinon j'aimerais ajouter que je n'ai aucune idée du pourquoi de ce résultat, donc si vous avez envie d'exposer vos suppositions au reste du monde dans les commentaires, n'hésitez pas. :-)