Redazione
a- a+

Pagine ASP più veloci: come fare

Vediamo come rendere il caricamento delle pagine ASP.NET più veloce. Codici ed esempi.

Le pagine ASP.NET possono essere notevolmente complesse specialmente se stiamo realizzando applicazioni che fanno massiccio uso di  interrogazioni a database e oggetti data. In tal caso succede che la pagina diventi notevolmente pesante e lenta a caricarsi. Ma non c’è motivo di preoccuparsi: possiamo mettere in atto vari stratagemmi per potere recuperare snellezza nella pagina e velocità del sito, settando e ottimizzando alcuni parametri. Vediamo quali sono e come poterli gestire.

ViewState

Il ViewState è la tecnica utilizzata da ASP.NET per tenere traccia, attraverso un campo nascosto nel Form, lo stato di un controllo: quando una pagina ed il relativo Form vengono eseguiti, i valori di tutti i controlli sono codificati all’interno di un’unica stringa memorizzata in un campo nascosto chiamato VIEWSTATE. Questa soluzione consente di trasferire la gestione dello stato dei controlli dal Server al Client; solo quando il Client effettuerà il PostBack della pagina al Server, attraverso il ViewState, verranno ripristinate tutte le impostazioni delle informazioni presenti nella pagina.

Esempio di ViewState:

<input type="hidden" name="__VIEWSTATE" value="dDwxNDg5OTk5MzM7Oz7DblWpxMjE3ATl4Jx621QnCmJ2VQ==" />

Possiamo quindi descrivere meglio il ViewState come il meccanismo in base al quale lo stato di una pagina viene memorizzato durante la fase di PostBack; lo stato è mantenuto solo se vengono eseguite richieste consecutive della stessa pagina, nel caso in cui venga caricata una nuova pagina il ViewState verrà perso. L’unico svantaggio nell’utilizzo del ViewState è dato dalla dimensione della pagina, che cresce notevolmente al crescere del numero di controlli presenti nel Form. Per default il ViewState viene attivato in tutte le pagine, ma è possibile disattivarlo impostando la proprietà EnableViewState di ogni singolo controllo a "false", oppure disabilitando la gestione direttamente su tutta la pagina o a livello di applicazione.

Ricapitolando, si può disabilitare il ViewState:

nel tag:  <asp:datagrid EnableViewState="false" … /> 
nella direttiva di pagina:  <%@ Page EnableViewState="False" … %> 
nel web.config:  <Pages EnableViewState="false" … /> 

Ottimizzare il Web.Config

Nel disabilitare il ViewState va fatta attenzione, dovete essere sicuri prima di disabilitarlo che realmente non vi serva e non lo utilizzate per recuperare informazioni sullo stato. Per migliorare le prestazioni del nostro sito bisogna che venga ottimizzato il Web.Config nel seguente modo:

  • Usare il page caching

La pagina viene salvata nella memoria cache per un certo ammontare di tempo e verrà visualizzata dalla cache senza ricorrere per ogni chiamata alla rigenerazione della pagina, a meno che non variano i dati e le informazioni sulla pagina. In tal modo la pagina sarà più veloce da caricare. Il Page Caching porterà migliorie significative solo se i dati della pagina non si aggiornano frequentemente e rapidamente, altrimenti non ci saranno significativi miglioramenti in quanto la pagina dovrà essere rigenerata ogni volta che i dati si modificano.

<caching>
<outputCacheSettings>
    <outputCacheProfiles>
        <add name="cached" duration="600" 
            varyByParam="none" enabled="true"/>
    </outputCacheProfiles>
</outputCacheSettings>
</caching>

Con l’esempio di sopra, le pagine verranno mantenute in cache per circa 600 secondi.

  • Rimuovere I moduli httpModules non necessari dal web.config

Si utilizza il tag remove seguito dal nome dell’httpModules non necessario

<add name="ScriptModule" 
     type="System.Web.Handlers.ScriptModule, System.Web.Extensions, 
           Version=3.5.0.0, Culture=neutral, 
           PublicKeyToken=31BF3856AD364E35"/>
<remove name="WindowsAuthentication" />
<remove name="PassportAuthentication" />
<remove name="AnonymousIdentification" />
<remove name="UrlAuthorization" />
<remove name="FileAuthorization" />
  • Disabilitare il trace

Nello sviluppo di applicazioni Web è molto importante poter analizzare le richieste HTTP, per capire lo stato della nostra applicazione durante l’esecuzione e capire cosa stia esattamente accadendo, magari inserendo anche delle istruzioni che ci permettano di effettuare una specie di debug/log a runtime.  ASP.NET in questo caso ci viene in aiuto offrendoci il tracing che  consente di analizzare le richieste Web effettuate ad ASP.NET, ma non solo: permette anche di analizzarle in modo decisamente approfondito verificando come viene effettuata la richiesta, con quali cookies, quale ID di sessione, quali Headers, ecc.  Il tracing infatti ci mette in condizione di controllare le richieste Web e di controllarne lo stato restituito dal Web Server al client. L’uso del tracing è dispendioso in termini di tempo soprattutto se la pagina deve fare molte richieste client-server come può accadere se ci sono molte interrogazioni a un database. In tal caso sarebbe opportuno disabilitare l’uso del tracing soprattutto nell’applicazione finale, ovvero quando ormai abbiamo testato e non ci sarebbe più bisogno di effettuare operazioni di debug. Per disabilitare il tracing basta inserire la seguente riga nel Web.Config:

<trace enabled="false" pageOutput="false" />

Allo stesso modo nella versione finale, quando ormai abbiamo testato ed eliminato tutti gli errori, si può settare la modalità debug a false

<compilation debug="false">

Dopo aver ottimizzato il Web.Confing ottimizziamo le altre strutture presenti nel nostro sito.

I fogli di stile

È importante tenere pulito un foglio di stile e rimuovere tutto il codice non necessario e superfluo, togliendo tutte le classi non utilizzate e usando un solo file CSS. È opportuno inserire le dichiarazioni dei file CSS al top della master page ed è raccomandabile chiamare i file CSS all’inizio di una pagina, perché in questo modo il page rendering diventerà progressivamente efficiente. I link ai file JavaScript, se presenti, vanno linkati alla parte inferiore della master page  principale. Infatti, se li mettessimo all’inizio della pagina, questo aggiungerebbe un tempo di caricamento non necessario.

Infine ultimo accorgimento utile: dove è possibile usareserver.transfer() invece del response.redirect(). Questo comporta un più veloce caricamento della pagina e in più posta solo il form e non l’intera pagina.



Ti potrebbe interessare anche

commenta la notizia

C'è 1 commento
Staff
Ti interessano altri articoli su questo argomento?
Chiedi alla nostra Redazione!