Quelqu'un at-il compilé jQuery contre le compilateur Closure récemment publié par Google?
Il a été rapporté des économies énormes dans la taille du code. Je suis curieux de savoir quel est l'avantage si jQuery a été compilé avec.
John Resig a signalé un bogue sur les fonctions récursives lorsqu'il a tenté de compiler jQuery 1.4 tous les soirs. Il reste donc quelques problèmes à résoudre. Je ne voudrais pas utiliser un jQuery compilé avec Closure Compiler sans m'assurer qu'il passe le testbed jQuery.
http://code.google.com/p/closure-compiler/issues/detail?id=1&can=1#c2
J'ai essayé avec jQuery jQuery 1.3.2
jQuery-1.3.2.min.js 57254 Bytes
jQuery closure compiler 49730 Bytes
-----------------------------------
Reduced by 7524 Bytes
Saved 13.31% off the original size
Saved 10.87% off the gzipped size
Gain de ~ 7Ko
Mais il signale également 15 avertissements et je n'ai pas vérifié si cela fonctionnait toujours.
Le compilateur de fermeture élimine tout code que vous n'utilisez pas réellement. La page Web typique n'utilisera qu'une infime fraction des fonctions de jQuery. Par conséquent, la compilation de votre code et la version complète de jQuery vous apporteront le plus d'avantages.
Avec ADVANCED_OPTIMIZATIONS désactivé:
Avec ADVANCED_OPTIMIZATIONS activé: cela ne fonctionne pas sans modification. Avec ADVANCED_OPTIMIZATIONS activé et tout ce que je peux trouver pour exporter exporté ... cela ne fonctionne toujours pas, et le code a déjà atteint 53466 octets (et 18785 gzipped, ce qui correspond à plus que le fichier code fermé sans ADVANCED_OPTIMIZATIONS) afin que cela ne ressemble pas à une proposition gagnante.
Depuis jQuery 1.4, le compilateur de fermeture de Google est utilisé comme technique de minification par défaut pour les versions de jQuery. Cependant, jQuery utilise uniquement les paramètres SIMPLE_OPTIMIZATIONS. L'équipe jQuery n'a aucun projet de prise en charge de ADVANCED_OPTIMIZATIONS .
Par curiosité, j'ai mis en place un test SlickSpeed des dernières libs Prototype et jQuery, rétréci avec YUI et Closure. Vous pouvez exécuter les tests ici .
Comme d'autres l'ont noté, la compilation avec ADVANCED_OPT ne fonctionne pas, mais si quelqu'un souhaite effectuer ce travail, il me fera plaisir d'ajouter les résultats au test SlickSpeed.
La fermeture ne minimise-t-elle pas et ne renomme-t-elle pas vars? jQuery a déjà une version .min. Réduire à nouveau avec la fermeture sera probablement très utile et potentiellement dangereux.
Edit: je viens de le faire.
Compilation was a success!
Original Size: 55.91KB (19.28KB gzipped)
Compiled Size: 54.05KB (18.28KB gzipped)
Saved 3.34% off the original size (5.18% off the gzipped size)
C'est au-dessus de la version déjà exploitée. Il y a une démo ici: http://closure-compiler.appspot.com/home
J'ai utilisé Closure (avec ADVANCED_OPTIMIZATIONS) pour compresser le code javascript d'un site à page unique hébergé par I Host et j'ai constaté une économie de taille significative par rapport au compresseur YUI. J'ai donc commencé à étudier la réduction de jQuery pour ce site également, car il n'utilise certainement pas la bibliothèque entière jQuery.
Je reçois des avertissements chaque fois que je lance jQuery via le compilateur, indiquant principalement des parties du code qui ne sont pas utilisées. Même quand même, le code compilé ne fonctionne pas. Le problème principal que je vois est que les choses ne sont pas exportées correctement par le compilateur. J'ai pu facilement exporter des fonctions de mon propre code en les attachant à l'objet window, mais je n'ai pas encore pu le faire avec jQuery.
La bonne nouvelle est que John Resig expérimente déjà Closure. Je soupçonne que nous verrons de nouvelles versions compatibles dans un avenir proche.
J'ai essayé avec leur compilateur en ligne , cela fonctionne bien.