Compression CSS / JS GZip avec Asp.Net

Je suis actuellement sur un serveur virtuel hébergé, je veux activer la compression GZip pour mon site Asp.Net 3.5, comment puis-je démarrer?

J'ai essayé d'utiliser des fichiers JS «emballés», mais ils ne fonctionnent pas, je suppose que c'est parce qu'ils ne sont pas correctement gérés …?

GZIP devrait être géré par IIS , quelle version de IIS utilisez-vous?

Le client est responsable de demander au serveur une version GZiped. Le serveur recherchera deux choses, la requête est http 1.1 et un en-tête d'Accept-Encoding: gzip. Un moyen simple de rechercher ces en-têtes consiste à utiliser Firebug

IIS6 – GZip peut être activé avec le composant logiciel enfichable iis. Microsofts Sujet MSDN sur Gzip avec IIS6

IIS7 – GZip peut être activé avec le web.config en utilisant httpCompression xml tag Nick Berardi's Getting IIS 7 pour compresser JavaScript

En minifiant et en emballant les fichiers javascript, vous réduisez la taille totale de JavaScript en supprimant les espaces et en raccourcissant les noms de vos variables.

Ma façon préférée de le faire serait d'utiliser un outil de compression comme YUI Compressor et de le faire partie du processus de construction (après minification, le taux de compression ne sera pas si élevé. Ou vous pouvez utiliser les deux. Point étant que vous ne devriez pas ' T manque le plus grand problème de performance donné ci-dessous).

L'un des principaux problèmes de compression par IIS est qu'il ne stocke pas tous les fichiers JS / CSS dans un seul fichier. Donc, si votre site dispose de 7 fichiers JS et de 20 CSS (ce qui est étonnamment très courant), il faudra 27 HTTP aller-retour pour obtenir vos données. L'écriture d'un gestionnaire HTTP pour le faire est une bonne idée pour les personnes ayant un hébergement partagé.

Un algorithme de construction simple serait d'avoir un fichier make dans le répertoire racine JS / CSS

If(build.config == release) { Add your js file in order to the make files. eg jQuery.js jQuery.form.js jQuery.container.js custom.js Split and pass it as params to YUI Compress O/P to site.js Delete all the above files. } 

En mode de sortie, le maître de page ne doit se référer que site.js

Edit : Voici un lien pour intégrer YUI et nant.
Edit : Justin Etheredge a publié un outil génial pour combiner et compresser le fichier css / js appelé SquishIt .

Vous pouvez également utiliser le code pour GZip les scripts. La façon dont cela fonctionne est que vous utilisez une page ASP.NET pour fournir le fichier compressé avec les en-têtes corrects (en indiquant au navigateur que ce flux est compressé). J'ai écrit un article sur l'utilisation de la compression GZip avec Minify (utilisant YUI) et le regroupement des scripts (moins de tours au serveur), vous le trouverez à http://www.codeproject.com/KB/custom -controls / smartinclude.aspx

J'ai utilisé un petit contrôle de serveur pratique pour ma minification CSS, appelée StyleManager. Il utilise le compresseur YUI sous le capot.

Il est plus facile d'ajouter à votre site que d'ajouter YUI C manuellement, et son utilisation est très similaire à ScriptManager d'asp.net, il est donc rapide de s'habituer.

Plus important encore – il combine vos fichiers CSS aussi. Donc, au lieu d'avoir comme 10 fichiers CSS télécharger, il ne sera que 1, qui sera également compressé, etc.

Vérifiez-le – gStyleManager.com

Je suis deuxième que IIS est l'endroit pour configurer ceci. Si vous ne pouvez pas modifier directement IIS, vous pouvez ajouter un gestionnaire à toutes les demandes qui vérifient les paramètres Accept-Encoding: gzip ou deflate. Ensuite, vous faites la bonne compression en utilisant quelque chose comme SharpZipLib . Cependant, cela devient rapide.

Vous trouverez un succès limité dans la gestion manuelle de vos fichiers statiques comme css ou js. Disons que vous incluez styles.css.gz et scripts.js.gz dans votre html, et que vous mappez l'extension gz au mimetype pour le texte gzip (est-ce application/x-gzip ?) Beaucoup de navigateurs (c'est-à-dire firefox, safari , Peut-être chrome) va bien gérer. Mais certains navigateurs ne le feront pas, et vous les quittez (liens, peut-être plus vieux opéra).

Je considérerais utiliser "dégonfler" pour la même chose qu'il est plus efficace que GZip. J'ai ajouté des codes pour les deux.

Pour ajouter ceci à votre site, créez un fichier texte et copiez collez les codes sous-administrés dans le fichier, puis enregistrez-le comme Global.asax. Maintenant, ajoutez ce fichier à la racine de votre site.

 <%@ Application Language="C#" %> <%@ Import Namespace="System.IO" %> <%@ Import Namespace="System.IO.Compression" %> <script runat="server"> void Application_PreRequestHandlerExecute(object sender, EventArgs e) { HttpApplication app = sender as HttpApplication; string acceptEncoding = app.Request.Headers["Accept-Encoding"]; Stream prevUncompressedStream = app.Response.Filter; if (!(app.Context.CurrentHandler is Page || app.Context.CurrentHandler.GetType().Name == "SyncSessionlessHandler") || app.Request["HTTP_X_MICROSOFTAJAX"] != null) return; if (acceptEncoding == null || acceptEncoding.Length == 0) return; acceptEncoding = acceptEncoding.ToLower(); if (acceptEncoding.Contains("deflate") || acceptEncoding == "*") { // defalte app.Response.Filter = new DeflateStream(prevUncompressedStream, CompressionMode.Compress); app.Response.AppendHeader("Content-Encoding", "deflate"); } else if (acceptEncoding.Contains("gzip")) { // gzip app.Response.Filter = new GZipStream(prevUncompressedStream, CompressionMode.Compress); app.Response.AppendHeader("Content-Encoding", "gzip"); } } </script> 

La publication précédente fonctionne bien pour les pages aspx, mais pas pour les fichiers css et js. Le truc pour inclure les fichiers css et js dans la compression consiste à:

  1. .css.aspx les extensions de fichiers de vos fichiers .css.aspx et .js vers .css.aspx et .js.aspx
  2. Insérez <%@ Page ContentType="text/css" %> et <%@ Page ContentType="text/javascript" %> dans les fichiers .css.aspx et .js.aspx
  3. Inclure les fichiers .css.aspx et .js.aspx au lieu des fichiers .js.aspx et .js dans vos pages