2010-02-24 8 views
3

Je me demandais s'il y avait un moyen de compresser javascript en temps réel, un peu comme gzip fonctionne pour HTML (et CSS apparemment)?Comment compresser les javascript en temps réel?

Je ne veux pas avoir à compresser mon fichier manuellement avant le téléchargement à chaque fois, je veux que le serveur le fasse pour moi sans aucun travail supplémentaire de la part des codeurs paresseux.

+2

Cela se produira automatiquement si vous l'avez spécifié sur votre serveur, comme c'est le cas pour HTML et CSS. –

+0

en temps réel VS ????????? – leppie

Répondre

3

gzip fonctionne sur tous les textes, y compris JavaScript

Si vous voulez faire plus de compression (par exemple en utilisant le compresseur YUI avant gzipping), vous pouvez alors obtenir votre serveur pour le faire, mais il serait plus facile de le faire avant de télécharger. L'astuce consiste à automatiser le processus de construction et de publication - ainsi vous exécutez un script qui effectue la compression puis charge le résultat, plutôt que de glisser les fichiers manuellement ou de manière similaire.

2

Je vous suggère d'écrire un petit script qui télécharge le fichier automatiquement; alors vous pouvez le compresser avant le téléchargement.

L'autre option consiste à dire à votre serveur Web de compresser les fichiers avant le transfert (mais cela devrait être fait automatiquement).

Une autre option est un travail cron (voir cron(1) ou le planificateur Windows) sur le serveur qui vérifie périodiquement le fichier (par exemple une fois par jour) et le compresse lorsqu'une nouvelle version a été téléchargée.

2

Sur Apache, cette compresse tout sauf les images:

<IfModule mod_deflate.c> 

# Insert filter 
SetOutputFilter DEFLATE 

# Netscape 4.x has some problems... 
BrowserMatch ^Mozilla/4 gzip-only-text/html 

# Netscape 4.06-4.08 have some more problems 
BrowserMatch ^Mozilla/4\.0[678] no-gzip 

# MSIE masquerades as Netscape, but it is fine 
# BrowserMatch \bMSIE !no-gzip !gzip-only-text/html 

# NOTE: Due to a bug in mod_setenvif up to Apache 2.0.48 
# the above regex won't work. You can use the following 
# workaround to get the desired effect: 
BrowserMatch \bMSI[E] !no-gzip !gzip-only-text/html 

# Don't compress images 
SetEnvIfNoCase Request_URI \ 
\.(?:gif|jpe?g|png)$ no-gzip dont-vary 

# Make sure proxies don't deliver the wrong content 
Header append Vary User-Agent env=!dont-vary 
</IfModule> 
+0

Si vous voulez une minification en temps réel au lieu de la compression, j'ai un court script PHP ici: http://razorsharpcode.blogspot.com/2010/02/lightweight-javascript-and-css.html – stillstanding

2

Si vous voulez dire « compresser » comme dans « maintenir le code dans exactement le même format, mais le pousser dans le tuyau comprimé », puis activer la compression gzip selon les instructions pour votre serveur, que vous n'avez pas spécifiées dans les tags/question. Si vous voulez dire "compresser" comme dans "minify the code", il y a des options que vous pouvez essayer, comme inclure un module/processus de minification dans le pipeline. J'ai, très récemment, créé une solution dans ASP.net qui utilise le Microsoft Ajax Minifier 4.0 pour réduire les fichiers javascript demandés, à la volée essentiellement en ajoutant des balises de script à la page avec une balise src qui est similaire à minifier.ashx? Source = my/javascript/file/et/path/here.js et en utilisant la classe Minifier dans AjaxMin.dll pour réduire le code à la demande. Cela présente plusieurs avantages par rapport aux pré-minification:

  1. Vous pouvez passer un drapeau dans votre en direct le site, via un cookie, une valeur querystring, un nom d'utilisateur donné, pour désactiver minification ce qui rend le débogage peu plus facile si vous devez résoudre le problème "en direct"
  2. Vous pouvez apporter des modifications d'urgence à votre code en direct sans avoir à modifier votre code non réduit, le réduire, le télécharger (évidemment pas quelque chose que vous devriez faire régulièrement, mais c'est bien que la capacité est là, si besoin est).
  3. Il y a un moins ensemble d'objets de construction (les fichiers js minified) à vous soucier de garder une trace de source contrôle, etc, ..

Dis-avantages:

  1. Le minification ajoute certains frais généraux pour les demandes de script.Cela peut être atténué soit par la mise en cache du résultat de minification en mémoire ou sur le disque
  2. Je ne suis pas sûr si la licence pour AjaxMin.dll permet ce type d'utilisation
  3. Si vous utilisez Visual Studio/un autre outil qui fournit IntelliSense pour script, il ne peut pas maintenant être en mesure de vous donner cela à partir de vos balises de script