La feature più richiesta dalla community .Net e più precisamente quella Blazor, nella sua accezione WebAssembly, è la possibilità di effettuare una compilazione AoT (Ahead-of-Time). Questa era già in programma per il rilascio di .NET 5.0 ma per questioni legate alla situzione globale si è scelto di ufficializzarne il rilascio con .NET 6.0.
Vediamo più nel dettaglio di cosa si tratta.
Blazor WASM nasce con l'ottica di eseguire codice C# in WebAssembly, ed è proprio qui che iniziano i problemi: questo tipo di conversione non è banale, al punto che si è deciso di utilizzare un interprete. Al momento della pubblicazione, la nostra applicazione viene convertita in IL (Intermediate Language) che verrà poi analizzato e tradotto da dotnet.wasm. Questa fase che prevede la traduzione da IL a codice binario è detta JIT (Just in Time compilation). Abilitando l'AoT lo step viene saltato, convertendo direttamente C# in WebAssembly.
Il risultato è che AoT consente al codice di girare più velocemente, riducendo il carico di lavoro a runtime della CPU.
Per abilitarla è necessario installare il pacchetto wasm-tools, abilitare la configurazione nel progetto, e utilizzare il normale comando di pubblicazione o la GUI di Visual Studio.
dotnet workload install wasm-tools
<!-- *.csproj --> <PropertyGroup Condition="'$(Configuration)' == 'Release'"> <RunAOTCompilation>true</RunAOTCompilation> </PropertyGroup>
dotnet publish -c Release
L'attributo che specifica una condizione all'interno del file del progetto è opzionale, e può puntare anche a configurazioni custom; noi abbiamo preferito inserirlo perché di solito la compilazione AoT richiede molto più tempo della normale compilazione, e in questo modo possiamo attivarla selettivamente alla fine della fase di sviluppo.
Infatti, il compilatore dovrà tradurre tutto il codice in WebAssembly, operazione molto più dispendiosa di una normale compilazione IL. Un altro effetto di questa modalità, è che le dimensioni dell'assembly risultante saranno maggiori. Al primo caricamento, a seconda delle dimensioni dell'applicazione, potrebbero essere necessari più secondi di attesa, dato che il pacchetto risulterà più pesante.
Problema che viene alleviato dal browser, in quanto a seguito del primo download, il file verrà salvato nella cache e i tempi iniziali di caricamento torneranno ad essere analoghi alla versione JIT. Può essere utile avere questo tipo di condizione nel momento in cui vogliamo fare un deploy in locale o in un ambiente di test.
In conclusione il passaggio ad una compilazione AoT è un vantaggio in termini di prestazioni - Una funzione costruita con 4 cicli innestati può girare fino a 5 volte più velocemente - a discapito di un primo caricamento leggermente più lento. Otteniamo anche una garanzia a lungo termine, in quanto a seconda degli sviluppi del compilatore, si riuscirà a creare codice più performante e a coprire più casi: al momento della stesura di questo script la reflection e i tipi dynamic non sono supportati, e costringono l'applicazione ad utilizzare una compilazione JIT per quelle parti di codice.
Commenti
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.
Approfondimenti
Migrare una service connection a workload identity federation in Azure DevOps
Cancellare una run di un workflow di GitHub
Supportare il sorting di dati tabellari in Blazor con QuickGrid
Utilizzare i primary constructor di C# per inizializzare le proprietà
Gestire domini wildcard in Azure Container Apps
Sviluppare un'interfaccia utente in React con Tailwind CSS e Preline UI
Eseguire un metodo asincrono dopo il set di una proprietà in Blazor 8
Modificare i metadati nell'head dell'HTML di una Blazor Web App
Reactive form tipizzati con FormBuilder in Angular
Disabilitare automaticamente un workflow di GitHub
Esportare ed analizzare le issue di GitHub con la CLI e GraphQL
Filtering sulle colonne in una QuickGrid di Blazor
I più letti di oggi
- Real Code Day 4: Web UI: applicazioni con ASP.NET 4.0 e MVC 2.0
- Gestire gli errori di concorrenza in Entity Framework
- Configurare più site su unico web role di Windows Azure
- Usare ThemeResource per creare risorse reattive ai temi nelle Universal App
- Personalizzare le richieste con i rule set di Azure Front Door
- Aprire una popup in Silverlight
- Aprire una finestra di dialogo per selezionare una directory in WPF e .NET 8
- ASP.NET Core 2