Ciclo di vita di una pagina ASP.NET

Lavorando ogni giorno con applicazioni web, ho pensato di fornire qualche dettaglio in più su come funziona una pagina asp.net, argomento molto interessante per chi come me sviluppa software in cui l’engine è totalmente asincrona per sfruttare al meglio il framework e rendere le applicazioni web più reattive quando il bacino di utenza è elevato (o non si sa mai, anche quando il server web che ospita non è dei migliori!).

Partiamo da una lista dei principali steps di cui si compone la generazione di una pagina web asp.net:

  1. Inizializzazione
  2. Costruzione dei controlli
  3. Gestione dello stato
  4. Gestione degli eventi (event handler)
  5. Disegno della pagina (rendering)
Dove tutto ha inizio.
Ma da dove parte tutto? Semplice! Da una richiesta Page Request, il framework, in base alle impostazioni decide se inizializzare nuovamente la pagina o prenderne una copia dalla cache (vi consiglio di leggere qualcosa a riguardo: caching, outputCache); proprietà della pagina come Request e Response vengono impostate, la Request viene inizializzata in base al tipo di richiesta, cioè se la pagina viene caricata per la prima volta o se è in PostBack (tra le proprietà della pagina ce n’è proprio una che si chiama IsPostBack, ovviamente sarebbe opportuno leggere qualcosa anche su questa variabile che differisce come significato dall’argomento outputCahce) ed infine vengono caricate le proprietà relative alla Cultura (ICulture).
Il caricamento
Subito dopo vengono inizializzati tutti i controlli presenti nella pagina, per riassumere: tutti gli elementi html con attributo runat=”server” ed identificati da un ID univoco.
Poi si passa al Caricamento, Load, se la pagina è in PostBack i dati dei controlli vengono caricati dal ViewState (solamente se nella direttiva Page, EnableViewState è impostato a true), in caso contrario viene eseguita la logica descritta dallo sviluppatore.
La validazione
Validation, viene richiamato il metodo di Validazione di ogni controllo per capire se questo ha subito variazioni problematiche. Se la pagina è in PostBack, vengono eseguiti i metodi chiamanti (es. pressione di un bottone a cui è collegato un evento).
Il disegno
Finalmente arriviamo al Disegno vero è proprio, Rendering, attraverso il quale la pagina viene disegnata, un OutputStream carica al suo interno il contenuto HTML generato da ogni controllo presente in essa(si perchè ognuno di essi contiene un metodo che si chiama RenderControl che accetta un HttpTextWriter su cui rilascia codice html per quanto riguarda “se stesso”) e poi di volta in volta per tutti gli altri elementi presenti.
Il rilascio
Alla fine, viene avviata un operazione di “pulizia” (si perchè il framework vuole ordine), cosi si passa al processo di Unload. Una volta che la pagina è stata disegnata ed inviata al richiedente tutte le sue proprietà vengono rilasciate (si parla proprio di Dispose).

Molto importante in questo contesto è il concetto di Event wire-up, ASP.NET cerca di trovare dei metodi che corrispondono ad una denominazione convenzionale (Page_Load, Pag_Init etc.), è possibile attivare o meno questo comportamento (che per Default è lo è già) impostando la proprietà (nella System.Page) AutoEventWireup su true/false.
Con questo breve articolo ho cercato di fornire qualche spiegazione in più, utile durante quei lunghi debug dove delle volte ci riesce davvero difficile capire dove risieda il problema ma più in generale anche per avere più chiarezza sulle strumentazioni che si utilizzano!

Sviluppatori freeware

Oggi ho scoperto una cosa interessantissima, solitamente se dici faccio il muratore o sono idraulico ti dicono che sei un lavoratore con i fiocchi che per portare a casa lo stipendio fà veramente tanto, ma se dici che sei uno sviluppatore di software?
Mi chiama una persona: ciao, mi ha dato il tuo contatto xyz, so che fai siti web, vorrei un sito che fà questo, quello che non so e alcune cose che potrei voler fare ma che oggi non conosco!.
Io: ciao, si faccio sito web, quello che mi chiedi si può fare! (le ho spiegato per bene cosa avrei fatto e subito dopo ho proposto “vediamoci per parlarne di persona”.
Persona: mmm, si ma prima di vederci vorrei chiederti a quanto ammonterebbe la spesa?.
Io: verrebbe ZZZ € (vì garantisco che la cifra chiesta non è superiore al quantitativo di lavoro da fare!).
Persona: ah… ma io pensavo che potevi farmi questo lavoro “amatorialmente”, cioè io vorrei che me lo facesse un ragazzo a cui piace fare queste cose, che lo faccia a tempo perso cosi con 100/200 euro si finisce l’opera!.
Io: ah.. capisco, allora le posso chiedere una cortesia? Quando trova il ragazzo che fà questi lavori per passione, mi avvisa, sà perchè? Sarei interessato a fargli fare qualcosina!.

Non continuo a parlavi di questo assurdo discorso, ma effettivamente qui al sud è un pò cosi, se non fai un lavoro in cui la sera torni a casa stanco per la fatica fisica, non è un lavoro, semplicemente stai facendo ciò che ti piace e se lo fai significa che è automaticamente gratis! No comment