11545 sujets

JavaScript, DOM et API Web HTML5

Bonsoir,

Pour les gens qui connaissent déjà YUI Compressor (le compresseur JavaScript de Yahoo), en voici un autre que je n’ai pas encore testé, mais dont quelque personnes prétendent que ses performances sont meilleures que celles de celui de Yahoo :

UglifyJS (sur GitHub)

Le nom ne fait pas très sérieux, mais c’est sérieux. La présentation est plus bas dans la page.

Une remarque tout de même : l’efficacité d’un compresseur JavaScript peut parfois cacher des surprises, pas toujours dans le bon sens. En plus de compresser vos JavaScript avant de les envoyer sur votre site, vous activerez peut-être encore la compressions GZip sur votre serveur (ou la ferai prendre en charge pas vos CGI). À ce sujet j’ai lu des testes il y a quelques mois, qui montraient que le résultat Compression JS + Compression GZip n’est pas nécessairement le meilleur avec les compression JS les plus élevées. En effet, certains algorithmes de compression JS suppriment tellement de redondances dans le JavaScript produit, que GZip n’arrive plus à les compresser aussi bien (la compression, c’est essentiellement une suppression de la redondance). En résumé, une compressions JS plus élevées peut se solder par une compression GZip plus faible, et c’est le résultat de l’application des deux qu’il faut surveiller.

Pour être sûr de faire le bon choix, rien ne vaut donc une mesure concrète. Mais comme les compresseurs JavaScript ne cours pas les rues, celui-ci peut valoir la peine essayé (je l’essaierai un de ces jours).
Modifié par hibou57 (06 Feb 2011 - 20:40)
UglifyJS pose une problème, il repose sur Node.JS... encore un nième environnement d'exécution à installer, c'est pénible. J'ai donc plutôt opté pour Packer2, pour lequel il existe une version Perl. Ce n'est pas une application native, donc pas l'idéal, mais Perl au moins, fait partie de l'installation minimale de base sous Ubuntu; ça ne m'aurait pas plus sous Windows, mais Ubuntu, c'est Ubuntu, c'est pas Windows.

Juste que le paquet Perl est fait pour Windows (il propose d'ailleurs un version binaire... pour Windows seulement). Mais il n'y a pas beaucoup de choses à modifier, juste les choses inutiles (*.exe et *.dll a supprimer), le format des fin de ligne à changer, l'entête du script Perl à changer de "#!perl" en "#! /usr/bin/perl" et le bit d'exécution à ajouter au script principale.

J'ai fait un petit tar.gz ici : packer2.tar.gz. Pas besoin d'installation, décompressez l'archive et lancez le script exécutable, localement depuis son répertoire.

Il est moins efficace que YUI Compressor : un JavaScript de 1.5MB qui était réduit à 88KB avec YUI + GZip, n'est plus réduit qu'à 110KB avec Packer2 + Gzip, mais ça reste raisonnable comme solution permettant de ne plus dépendre de Java (YUI Compressor est une application Java).

Sinon il existe Closure Compiler, mais il semble défectueux d'après des testes que j'ai fait en ligne, et de plus, c'est Google, et je n'ai pas envie d'inviter à alimenter son monopole.
Modifié par hibou57 (04 Mar 2011 - 22:36)
Hello,

Le problème de Packer c'est que le moteur JS du navigateur doit exécuter le code une première fois pour «dé-packer», avant d'exécuter le code résultant. Ça a un impact sur les performances, surtout dans les navigateurs au moteur JS peu performant (IE 6-8, dans une certaine mesure Firefox 3 et la plupart des navigateurs mobile...).

C'est pour ça qu'on utilise plutôt des minifieurs tels que JSMin, YUI Compressor ou Closure Compiler.

Moi YUI Compressor me va très bien. Mais j'ai rarement des fichiers JS de 1.5 Mo.
fvsch a écrit :
Le problème de Packer c'est que le moteur JS du navigateur doit exécuter le code une première fois pour «dé-packer», avant d'exécuter le code résultant.

Cette version Perl ne semble pas effectuer cet encodage.

Mais sinon, c'est sûr que YUI est pour moi aussi ce que j'ai connu de mieux. Je viens de remarquer ce qui fait que Parker n'est pas aussi bon : il ne fait pas de substitution des noms de variables comme sait le faire YUI.

Je vais quand-même retenter quelque chose avec UglifyJS.

fvsch a écrit :
Mais j'ai rarement des fichiers JS de 1.5 Mo.

Je n'en ai qu'un comme ça, et ça me suffit (ouch).
fvsch a écrit :
Hello,

Le problème de Packer c'est que le moteur JS du navigateur doit exécuter le code une première fois pour «dé-packer», avant d'exécuter le code résultant. Ça a un impact sur les performances,

Une page de blog sur la question justement : Attention aux compresseurs javascript