La compilazione di ASP.NET

Il web.config è sicuramente familiare a tutti noi sviluppatori web, ma ci sono alcuni attributi che valgono la scrittura di un post ad hoc.

Oltre al classico connectionstrings e appsettings, in tutti i file di configurazione per applicazioni web esiste una sezione chiamata “compilation”, che permette di impostare un set di parametri che andranno ad influenzare la compilazione delle nostre pagine web.

Alcuni di questi attributi parlano da soli - inutile spiegare a cosa serve l’attributo debub=”true” - , ma ce ne sono altri che spesso si tralasciano o non si conoscono affatto.

Per esempio recentemente ho scoperto l’esistenza dell’attributo optimizeCompilations che, se impostato su true, può aumentare in maniera significativa i tempi di compilazione delle pagine web (maggiori informazioni qui http://blogs.msdn.com/b/davidebb/archive/2009/04/15/a-new-flag-to-optimize-asp-net-compilation-behavior.aspx).

Anche l’attributo batch ha lo scopo di migliorare le performance di compilazione ma, a differenza dell’attributo optimizeCompilations, questo è impostato di default su true, quindi possiamo omettere questo attributo nel nostro file di configurazione.

Un altro interessante attributo è numRecompilesBeforeAppRestart che, se impostato con dei valori corretti, può evitare alcuni noiosi restart dell’applicativo.

In ogni caso il mio preferito resta l’attributo tempDirectory Smile. Questo attributo permette di specificare la directory dove verranno salvati i file temporanei di compilazione.
Il perché mi piace particolarmente questo attributo è dovuto al fatto che uso un RAM Disk (personalmente uso questo http://memory.dataram.com/products-and-services/software/ramdisk) e, impostando la compilazione dei file di ASP.NET su questo particolare drive, si ottengono delle performance notevoli, specie in fase di startup.

Concludo con un pezzo della mia configurazione :

<compilation tempDirectory="G:\aspnet.temp\" 
                    optimizeCompilations="true" 
                    batch="true" 
                    debug="true" 
                    defaultLanguage="c#" 
                    numRecompilesBeforeAppRestart="250" 
                    targetFramework="4.0">
    <assemblies>
        <add assembly="System.Web.Abstractions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
        <add assembly="System.Web.Helpers, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
        <add assembly="System.Web.Routing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
        <add assembly="System.Web.Mvc, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
        <add assembly="System.Web.WebPages, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
    </assemblies>
</compilation>

Ciauz!


Comments