2009-03-21 18 views
11

Actualmente estoy en un servidor virtual alojado, quiero habilitar la compresión GZip para mi sitio Asp.Net 3.5, ¿cómo puedo comenzar?CSS/JS GZip Compresión con Asp.Net

He intentado utilizar archivos JS "empaquetados", pero no funcionan, supongo que es porque no se manejan correctamente ...?

Respuesta

19

GZIP debe ser manejado por IIS, ¿qué versión de IIS está ejecutando?

El cliente es responsable de solicitar al servidor una versión GZiped. El servidor buscará dos cosas, la solicitud es http 1.1 y un encabezado de Accept-Encoding: gzip. Una manera fácil de buscar estas cabeceras es utilizar firebug

IIS6 - GZip se puede activar con los IIS. Microsofts MSDN Topic On Gzip With IIS6

IIS7 - GZip se puede activar con el web.config utilizando compresión http etiqueta XML Nick Berardi's Getting IIS 7 to Compress JavaScript

Por minifying y envasado de archivos javascript, su disminuyendo el tamaño total de JavaScript mediante la eliminación de espacios en blanco y acortando los nombres de las variables.

+0

Un gran recorrido para IIS6: http://engineering.leads360.com/post/9301650692/http-compression-gzip-on-iis-6 –

1

En segundo lugar, IIS es el lugar para configurar esto. Si no puede cambiar IIS directamente, puede agregar un controlador a todas las solicitudes que comprueben la configuración de aceptación de codificación: gzip o desinflar. Luego haces la compresión correcta usando algo como SharpZipLib. Sin embargo, esto se vuelve loco rápidamente.

Encontrará algún éxito limitado al copiar manualmente sus archivos estáticos como css o js. Supongamos que incluye styles.css.gz y scripts.js.gz en su html, y asigna la extensión gz al tipo mimetype para texto comprimido (¿es application/x-gzip?) Muchos navegadores (es decir, firefox, safari, tal vez Chrome) lo manejarán bien. Pero algunos navegadores no lo harán, y los dejará fuera (enlaces, quizás ópera más antigua).

7

Mi forma preferida de hacerlo sería usar una herramienta de compresión como YUI Compressor y hacerla parte del proceso de compilación (después de minificar, la relación de compresión no será tan alta) o puede usar ambas. no debe perderse el mayor problema de rendimiento que se detalla a continuación).

Uno de los principales problemas de compresión de IIS es que no empaqueta todos los archivos JS/CSS en un solo archivo. Entonces, si su sitio tiene 7 archivos JS y 20 CSS (sorprendentemente esto es muy común), se necesitarán 27 HTTP de ida y vuelta para obtener sus datos. Escribir un manejador HTTP para hacer esto es una buena idea para las personas con alojamiento compartido.

Un simple acumulación algo sería tener un hacen archivo en el directorio raíz JS/CSS

If(build.config == release) { 
Add your js file in order to the make files. 
    e.g. 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 el modo de disparo que la página principal sólo debe referirse site.js

Editar : Aquí hay un link para obtener YUI y nant integrados.
Editar: Justin Etheredge ha lanzado una herramienta increíble para combinar y comprimir el archivo css/js llamado SquishIt.

1

También podría usar el código para cifrar los guiones.La forma en que funciona es que utiliza una página ASP.NET para entregar el archivo comprimido junto con los encabezados correctos (indicando al navegador que esta transmisión está comprimida). He escrito un artículo sobre cómo utilizar la compresión GZip junto con la minificación (usando YUI) y agrupando los guiones (menos viajes redondos al servidor), lo encontrará en http://www.codeproject.com/KB/custom-controls/smartinclude.aspx

1

He estado usando un pequeño práctico control de servidor para mi minificación de CSS, llamado StyleManager. Utiliza el compresor YUI debajo del capó.

Es más fácil agregar a su sitio que agregar YUI C manualmente, y su uso es muy parecido al ScriptManager de asp.net, por lo que es rápido acostumbrarse.

Lo más importante: combina tus archivos CSS también. Así que en lugar de tener como 10 archivos CSS para descargarlo sólo será 1, que también se comprime etc.

Check it out - gStyleManager.com

1

Me gustaría considerar el uso de "desinflar" para el mismo, ya que es más eficiente que GZip. He agregado códigos para ambos.

Para agregar esto a su sitio, cree un archivo de texto y copie y pegue los códigos undergiven en el archivo y guárdelo como Global.asax. Ahora, agregue este archivo a la raíz de su sitio.

<%@ 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> 
0

La publicación anterior funciona bien para las páginas aspx pero no para los archivos css y js. El truco para incluir css y js archivos en la compresión es:

  1. cambio de las extensiones de archivo de sus .css y .js archivos a .css.aspx y .js.aspx
  2. inserción <%@ Page ContentType="text/css" %> y <%@ Page ContentType="text/javascript" %> en los archivos .css.aspx y .js.aspx
  3. incluya los archivos .css.aspx y .js.aspx en lugar de los archivos .css y .js en sus páginas
Cuestiones relacionadas