YUI Compressor compresse le contenu JavaScript, notamment :
- Supprimer les commentaires
- Supprimer les espaces supplémentaires
- Optimisation mineure
- Remplacement de l'identifiant
Quelles optimisations subtiles YUI Compressor inclut-il ?
- object["property"] , si le nom de la propriété est un identifiant JavaScript légal (remarque : un identifiant JavaScript légal commence par une lettre, éventuellement suivie d'une ou plusieurs lettres, chiffres ou traits de soulignement) et n'est pas des mots réservés, sera optimisé à : objet.propriété
- {"property":123}, si le nom de la propriété est un identifiant JavaScript légal et n'est pas un mot réservé, il sera optimisé en {property:123} (Remarque : dans les littéraux d'objet, si le nom de la propriété est un identifiant JavaScript légal et n'est pas un mot réservé et ne nécessite pas de citer les noms de propriétés).
- 'abcd'efgh', sera optimisé en "abcd'efgh".
- "abcd" + "efgh", si des chaînes sont connectées, seront optimisés en "abcdefgh" (Remarque : le tout sous le principe de l'utilisation de YUI Compressor, pour les connexions de chaînes dans les scripts, l'efficacité et l'efficience de l'utilisation du connecteur "+" sont maintenabilité la plus élevée).
L'optimisation de compression la plus efficace pour JavaScript est le remplacement de l'identifiant.
Par exemple:
(fonction(){
fonction ajouter (num1, num2) {
renvoyer num1 + num2 ;
}
})();
Après avoir remplacé l'identifiant du genre :
(fonction(){
fonction A(C, B) {
retourner C+B ;
}
})();
Après avoir supprimé les espaces supplémentaires, on obtient :
(function(){function A(C,B){return C+B;}})();
Le remplacement de l'identifiant de YUI Compressor ne remplace que les noms de fonctions et les noms de variables, alors qu'est-ce qui ne peut pas être remplacé ?
- Valeurs primitives : chaîne, booléen, nombre, null et non défini. De manière générale, les chaînes occupent le plus d'espace, suivies par les littéraux non numériques (vrai, faux, nul, sous-financé).
- Variables globales : fenêtre, document, XMLHttpRequest, etc. Les plus couramment utilisés sont le document et la fenêtre.
- Nom de l'attribut, tel que : foo.bar. L'espace occupé est juste derrière les chaînes. L'opérateur "." ne peut pas être remplacé et abc consomme plus d'espace.
- Mots-clés. Les mots-clés souvent galvaudés sont : var, return. La meilleure méthode d'optimisation : les mots-clés var et return n'apparaissent qu'une seule fois dans une fonction.
Le traitement d'optimisation pour les valeurs primitives, les variables globales et les noms d'attributs est à peu près le même : toute valeur littérale, variable globale ou nom d'attribut utilisé plus de 2 fois (y compris 2 fois) doit être remplacé par le stockage de variables locales.
Il existe cependant certaines situations dans lesquelles la substitution d'identifiant est interdite :
- Utilisez la fonction eval(). Solution : N'utilisez pas et ne créez pas de fonction globale encapsulant eval().
- Utilisez l'instruction with. Solution : La méthode est la même que ci-dessus.
- Commentaires conditionnels pour JScript. Seule solution : ne pas l'utiliser.
Puisque YUI Compressor est construit sur l’interpréteur rhino , toutes les optimisations ci-dessus sont sécurisées.
Lectures complémentaires :
"Compression JavaScript extrême avec YUI Compressor"
original:
http://www.planabc.net/2009/08/02/javascript-compression_with_yui_compressor/