Articoli Referenze Script FAQ Downloads ASP E-Commerce con ASP Menu Javascript Area Aziende Cocktail Registrazione domini



Ottimizzare le risorse di IIS usando ASP

Home + Articoli + Web Server + Articolo # 34
Autore: Luca Ruggiero

Concesso in esclusiva a Mr.Webmaster. Vietata la riproduzione.


Un sito dinamico realizzato in ASP necessita di alcune accortenze per evitare di sovraccaricare il server Web che lo ospita e che ne esegue gli script.

Questo Articolo, dedicato sia a coloro che si avvicinano per la prima volta alla realizzazione di un sito Web dinamico utilizzando la tecnologia ASP, sia ai professionisti che non si sono mai posti troppi problemi, attraverso pochi consigli guiderà il lettore verso la perfetta ottimizazione di un sito e toccherà la sensibilità dello sviluppatore, sensibilizzando la pietà nei confronti del povero server Web che, se potesse parlare... :-)

Beh in realtà il server Web parla... o peggio, si impalla, va in crash, salta la CUP la scheda madre o l'hard disk, finendo per creare danni economici e dispendi di tempo non indifferenti: vi prego quindi non sottovalutate quanto state per leggere.

Usare i commenti ASP e non HTML

I commenti, fedeli compagni di viaggio dello sviluppatore saggio (carina la rima...), devono essere scritti in ASP e non in HTML, sia per risparmiare byte in fase di caricamento della pagina, sia perchè IIS non li vede di buon occhio e ritarda la restituzione delle informazioni della pagina.

Evitare quindi
<!-- Che carina... -->
<img src="laetitia_casta.jpg">
a favore di
<% ' Che carina... %>
<img src="laetitia_casta.jpg">
Concentrare i Response.Write

Il comando Response.Write per la restituzione di un output da parte del server va utilizzato con moderazione; di per se non presenta particolari problemi, ma è possibile ovviare in diversi modi.

Evitare quindi
<%
    Response.Write "Ciao "
    Response.Write "a "
    Response.Write "tutti!!!"
%>
a favore di
<%
    With Response
        .Write "Ciao "
        .Write "a "
        .Write "tutti!!!"
    End With
%>
oppure di
<%
    Response.Write "Ciao a tutti!"
%>
o meglio di
<%="Ciao a tutti!"%>
Si consiglia, ove possibile, di ricorrere addirittura all'HTML
...
%>
    <p>Ciao a tutti!</p>
<%
...
Usare, moderatamente, le SSI

L'utilizzo delle SSI (Server Side Include) è consigliato agli sviluppatori da un punto di vista più che altro pratico, dando la possibilità di includere in una sola matrice determinate informazioni.

E' tuttavia sconsigliato l'abuso, quindi, quando potete, concentrate in un solo file di configurazione tutto il possibile, evitando di dover includere troppi file. IIS, in questo modo, deve cercare ed integrare meno file per comporre il puzzle.

Capita spesso di dover includere tramite le SSI menu, barre di navigazione, intestazioni e piè di pagina, i quali, spesso, non contengono codice ASP ma solo HTML; in questo caso consiglio di includere file .html piuttosto che .asp.

Usare il file Global.asa per le variabili di applicazione e di sessione

Nel paragrafo precedente abbiamo visto che l'inclusione di file esterni è consigliata purchè trattata, concettualmente, con moderazione.

Il file Global.asa (facoltativo) viene usato come file di progetto di una qualsiasi applicazione ASP per la gestione delle variabili di tipo Application e Session. E' consigliato, allo scopo, ricorrere a questo e non a file inclusi tramite le SSI o peggio alle intestazioni delle pagina, anche perchè la sua funzione, come il suo nome lascia ad intendere, è globale ed estesa a tutto ilo sito, non limitata alle pagine che contengono le informazioni, sia in maniera diretta che attraverso inclusioni.

Non abusare dell'oggetto Session

L'oggetto Session contiene informazioni che hanno visibilità globale su tutto il sito e viene inviato al singolo browser dell'utente che ne fa, indirettamente, una specifica richiesta.

Si tratta di un elemento tanto utile quanto dispendioso in termini di risorse, quindi il consiglio è sempre lo stesso: uso ma non abuso.

Ove possibile, in termini pratici e di sicurezza, utilizzare i cookie.

Non abusare delle ServerVariables

Come l'oggetto Session, menzionato nel paragrafo precedente, anche la collezione ServerVariables, il cui scopo è quello di recuperare processi e variabili di ambiente del e dal server, va utilizzato quando necessario, ma senza abusarne, dato che il recupero delle informazioni richieste richiede uno sforzo da parte di IIS.

Il recupero di determinate informazioni, a volte futili o non indispensabili come il nome della pagina corrente o del dominio, può essere demandato ad una soluzione lato client. Rifletteteci.

Dimensionare e tipizzare le variabili

Vedo spesso in giro dei codici ASP in cui le variabili non sono dichiarate, dimensionate, valorizzate ne tipizzate. Non ho parole per questo e se ne avessi sarebbero non molto carine!

Ad esempio
nome = "Luca"
Ci vuole tanto a scrivere
Dim nome
nome = "Luca"
???

Non si tratta di un dispendio di righe o di caratteri ma, evitando Dim, si tratta di un dispendio di risorse di IIS che deve capire la funzione di quella variabile per poi utilizzarla.

Stesso discorso vale per la tipizzazione. Purtroppo in VBScript non è possibile usare una dichiarazione del tipo
Dim nome As String
cosa che ritengo molto grave, ma dovremmo dirlo a zio Bill in persona... quindi almeno usiamo le funzioni di conversione
Dim nome
nome = CStr(nome)
nome = "Luca"
Lo scopo è quello di far capire ad IIS che si tratta di una variabile di tipo stringa e va trattata come tale, favorendo in velocità e snellezza il processo di elaborazione e restituzione delle informazioni.

Non ridimensionare gli array

Gli array sono un tipo di variabile molto molto pesante di cui però capita di aver bisogno. Il consiglio è sia quello di evitarli del tutto quando possibile, sia quello di evitare di ridimensionarli con la clausola Redim.

Usare Option Explicit per le variabili

In merito al trattamento da riservare alle variabile ed agli array, consiglio di usare come primissima riga di una pagina ASP la dichiarazione Option Explicit che non permette di non dimensionare le variabili e ne gestisce in maniera fluida il flusso all'interno dei processi in cui vengono impiegate.

Chiudere le connessioni

Credo ci siano poche cose che impallano di più un server Web quanto lo impalla una connessione ad un database non chiusa: quindi (indovinate un po...) chiudetele!
cn.Close
Basta poco, che ce vò :-)

Distruggere gli oggetti ActiveX e DLL

Non basta chiudere una connessione ad un database o ad un qualsiasi oggetto che supporti il metodo Close; è necessario quindi settare i valori dei vari oggetti sul valore speciale Nothing
Set oggetto = Nothing
Conclusioni

Tutti i trucchi menzionati favoriscono un processo di caricamento delle pagine che potrebbe essere sfuggevole alla vista umana ma non a quella del server.

Fate un testo in locale e monitorate parallelamente i processi della CPU e quelli di IIS rispettivamente dal Task manager e da Gestione Sistema.

Buon lavoro!

© 2008 ASP Center di Luca Ruggiero - P. IVA 05564851219 - Disclaimer | Privacy | Pubblicità | Supportaci | Staff | Contatti
  Appunti PHP | Giornale Webmaster | Mr.Webmaster | Download | DevSpy.com | ASPCode.it | ClaudioGarau.it | Webmaster Facile | Come Faccio | AlVerde.net | CodiceFacile.it | I Programmatori | By Luciani | VoiceXML Italian User Group | Giochi | Extro Web Site | Morpheus Web | AG Web Solutions | Net-Free | PC Sicuro | PC Self | Tutorial Web | Dablones