2009-03-21 32 views
11

Sono attualmente su un server virtuale ospitato, voglio abilitare la compressione GZip per il mio sito Asp.Net 3.5, come posso iniziare?Compressione CSS/JS GZip con Asp.Net

Ho provato a utilizzare file JS "compressi", ma non funzionano, presumo che sia perché non vengono gestiti correttamente ...?

risposta

19

GZIP deve essere gestito da IIS, quale versione di IIS è in esecuzione?

Il client è responsabile di chiedere al server una versione GZiped. Il server cercherà due cose, la richiesta è http 1.1 e un'intestazione di Accept-Encoding: gzip. Un modo semplice per cercare queste intestazioni è quello di utilizzare firebug

IIS6 - GZip può essere attivato con le snap-in IIS. Microsofts MSDN Topic On Gzip With IIS6

IIS7 - GZip può essere attivato con il web.config utilizzando httpCompression tag XML Nick Berardi's Getting IIS 7 to Compress JavaScript

Con minifying e l'imballaggio file JavaScript, la vostra diminuendo la dimensione totale di JavaScript, eliminando gli spazi bianchi e accorciando i vostri nomi variabili.

+0

Grande guida per IIS6: http://engineering.leads360.com/post/9301650692/http-compression-gzip-on-iis-6 –

1

Secondo che IIS è il posto giusto per configurarlo. Se non puoi cambiare direttamente IIS puoi aggiungere un gestore a tutte le richieste che controllano Accept-Encoding: gzip o deflate settings. Quindi esegui la compressione corretta usando qualcosa come SharpZipLib. Tuttavia questo diventa kludgey rapidamente.

Troverete un certo successo nel gzipping manuale dei file statici come css o js. Supponi di includere styles.css.gz e scripts.js.gz nel tuo html e di mappare l'estensione gz al mimetype per il testo gzip (è application/x-gzip?) Un sacco di browser (ad esempio, firefox, safari, forse chrome) lo gestiranno correttamente. Ma alcuni browser non lo faranno e li stai lasciando fuori (link, forse l'opera più vecchia).

7

Il mio modo preferito di fare questo sarebbe quello di utilizzare uno strumento di compressione come YUI Compressor e renderlo parte del processo di compilazione (dopo la minimizzazione, il rapporto di compressione non sarà così alto. O è possibile utilizzare entrambi. non dovresti perdere il maggior problema di prestazioni indicato di seguito).

Uno dei problemi principali con la compressione di IIS è che non raggruppa tutti i file JS/CSS in un singolo file. Quindi se il tuo sito ha 7 file JS e 20 CSS (sorprendentemente questo è molto comune) ci vorranno 27 round trip HTTP per ottenere i tuoi dati. Scrivere un gestore HTTP per farlo è una buona idea per le persone con hosting condiviso.

Un semplice algo costruzione sarebbe quella di avere un fare file nella directory principale 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. 
} 

In modalità di rilascio si pagina master deve fare riferimento solo site.js

Modifica : Ecco uno link per ottenere YUI e nant integrato.
Modifica: Justin Etheredge ha rilasciato un fantastico strumento per combinare e comprimere il file css/js chiamato SquishIt.

1

È anche possibile utilizzare il codice per GZip degli script.Il modo in cui funziona è che si utilizza una pagina ASP.NET per consegnare il file compresso con le intestazioni corrette (dicendo al browser che questo flusso è compresso). Ho scritto un articolo su come utilizzare la compressione GZip insieme a minifying (usando YUI) e raggruppare gli script (meno round trip sul server), lo troverai a http://www.codeproject.com/KB/custom-controls/smartinclude.aspx

1

Ho usato un piccolo pratico controllo del server per il mio minification CSS, chiamato StyleManager. Usa compressore YUI sotto il cofano.

È più facile aggiungere al tuo sito che aggiungere YUI C manualmente, e il suo utilizzo è molto simile a ScriptManager di asp.net, quindi è facile abituarsi.

Ancora più importante: combina anche i file CSS. Così, invece di avere come 10 file CSS per scaricarlo semplicemente essere 1, che sarà anche compressi ecc

Check it out - gStyleManager.com

1

vorrei prendere in considerazione l'utilizzo di "sgonfiare" per lo stesso in quanto è più efficiente di GZip. Ho aggiunto dei codici per entrambi.

Per aggiungere questo al tuo sito, creare un file di testo e copiare i codici undergiven incollati al file e quindi salvarlo come Global.asax. Ora aggiungi questo file alla radice del tuo sito.

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

Il post precedente funziona bene per le pagine di aspx ma non per i file css e js. Il trucco per includere css e js file nella compressione è quello di:

  1. modificare le estensioni di file dei file .css e .js a .css.aspx e .js.aspx
  2. inserto <%@ Page ContentType="text/css" %> e <%@ Page ContentType="text/javascript" %> nei file .css.aspx e .js.aspx
  3. includere i file .css.aspx e .js.aspx invece dei file .css e .js nelle pagine