Domanda

Da un post precedente sul tentativo di migliorare le prestazioni dei miei siti ho esaminato la compressione HTTP. Ho letto di configurarlo in IIS, ma sembra essere una cosa globale per tutti i pool di applicazioni IIS, potrei non essere autorizzato a farlo dato che c'è anche un altro sito in esecuzione su di esso. Ho quindi visto del codice da inserire in global.asax per ottenere la stessa cosa in base al sito Web.

Vedi qui http://www.stardeveloper.com/articles/display.html?article=2007110401&page= 1] 1

È buono quanto l'installazione in IIS? Quanto è drammatico l'effetto? Problemi noti?

È stato utile?

Soluzione

Se vai avanti con questo, suggerirei di implementare un HttpModule contro global.asax. HttpModule ti consente di disabilitare la compressione con una modifica della configurazione rispetto alla ricostruzione e ti permette di scimmiottare con il tuo gruppo di compressione separato dalla tua app web.

Rich Crane ha un bel modulo 2.0 qui: http://www.codeplex.com/httpcompression/ se vuoi alzarti e correre veloce.

Il blowery menzionato da Steven Rogers è anche un HttpModule.

Altrimenti, scrivere il tuo è piuttosto semplice. Un HttpModule ti offre gli stessi eventi di global.asax: BeginRequest, EndRequest e eventi più dettagliati come PostReleaseRequestState e PreSendRequestHeaders di cui potresti aver bisogno per appianare tutte le rughe.

Per quanto riguarda la compressione IIS verus HttpModule, IIS è decisamente più semplice poiché non è necessario interagire con un altro assembly. Ho usato entrambi i metodi con le app aziendali ed entrambi eseguo ugualmente sotto test di carico. Se IIS è disponibile, direi di usarlo.

Tra il 60 e l'80% di compressione per file HTML, JS, CSS e XML è comune con gzip. Tieni presente che gran parte del tuo payload può essere costituito da immagini e oggetti multimediali che sono molto più difficili da comprimere.

Altri suggerimenti

http://blowery.org/httpcompress/

Abbiamo usato questa utility di compressione nel mio lavoro per un po '. Abbastanza bene.

Penso che l'opzione Global.asax sarà una buona opzione se, ad esempio, ti trovi in ??un ambiente di hosting condiviso, dove non hai accesso alla configurazione di IIS.

IIS 6 fornisce il supporto di compressione di base, ma se sei già in IIS 7, ti fornisce un'ottima compressione HTTP , puoi definire quali file vengono compressi in base al loro tipo MIME nei tuoi file di configurazione ...

Raggiunge essenzialmente la stessa cosa della compressione IIS: entrambi finiscono per inviare la risposta con la compressione gzip. Di recente ho implementato questo metodo e riduce costantemente le dimensioni della risposta del 60% senza alcun impatto sulle prestazioni degno di preoccupazione.

Vi sono alcuni possibili problemi. Innanzitutto, è necessario fare attenzione alla cache di output. È necessario utilizzare un VaryBy personalizzato per assicurarsi che vengano memorizzate nella cache versioni diverse per richieste con diverse intestazioni Accept-Encoding. Altrimenti, se la versione compressa viene memorizzata nella cache, tutti gli utenti la riceveranno, indipendentemente dal fatto che il loro browser possa accettarla o meno.

In secondo luogo, a volte GZipStream troncerà gli ultimi caratteri della risposta se si utilizza Response.End o Response.Flush, perché lo stream non viene chiuso fino a tardi. Non sono a conoscenza di nessuna buona soluzione a questo.

Infine, questo comprimerà solo il tuo HTML. Tutti i file CSS o Javascript verranno offerti normalmente. Dovresti, ad esempio, servire quei file tramite un IHttpHandler personalizzato per comprimerli.

Ci sono problemi con JavaScript e VBScript. Il problema JavaScript è stato confermato in un commento di xxldaniel su un codinghorror article , e ho avuto problemi con VBScript (per l'automazione M $ Office) usando un "Scripting.Dictionary" simile a JSON con " Microsoft.XMLHTTP " richiesta.

Puoi provare i moduli mod_gzip . Utilizza la versione gestita di ZLib e consente una configurazione altamente regolabile. La sintassi è compatibile con lo stesso modulo Apache e persino estesa. Quindi, ad esempio, potresti impostare livelli di compressione diversi per diversi tipi di mime e così via.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top