XAML è un XML, non è solo di WPF e soprattutto non è lento…
Con questo piccolo post voglio sfatare diversi miti. Non mi sto inventando nulla, altre persone molto più illustri di me l’hanno già ribadito, ma voglio scrivermelo anche io per dirlo principalmente a chi legge il mio blog. Nel mio blog ho parlato nei giorni scorsi di WPF (Windows Presentation Foundation), perchè è una tecnologia che mi affascina e che ritengo estremamente potente. Parlando di WPF, non si può non parlare di XAML. Ma cos’è davvero XAML?
XAML è un dialetto XML. Come ogni XML, deve essere ben formattato, ogni tag aperto deve avere il suo tag di chiusura e roba del genere. XAML è un XML introdotto nel FX3.0 di Microsoft e non riguarda solo WPF. XAML serve anche a WPF, ma per esempio anche a WF: lo ha chiaramente indicato Raffaele durante il meeting di XeDotNet.
Ma siccome qui stiamo parlando di WPF, cos’è XAML nel contesto di WPF ?
XAML serve a descrivere una gerarchia di oggetti, ma non solo visuali. Perciò dire che XAML serve a descrivere l’interfaccia utente è solo parzialmente vero. XAML può essere utilizzato anche per esprimere altri contenuti, come risorse di ogni tipo (occhio: davvero di ogni tipo), comportamenti, triggers, stili, animazioni, pannelli custom, trasformazioni grafiche, data-binding, altre classi .NET che a run-time saranno – magari – invisibili e via dicendo. XAML serve a definire una Window, una Page od uno UserControl nella sua interezza, quindi, e non solo per quanto riguarda il suo aspetto grafico.
L’ultima cosa che voglio dire è che la lunghezza di un file XAML non ha alcuna correlazione con le dimensioni dell’assembly che verrà generato. Un file XAML può anche essere immenso, perchè l’XML è un po’ prolisso e XAML ha una sintassi che magari non aiuta in questo senso. Però francamente preferisco leggere XAML che almeno è chiaro e semplice. Magari è questione di abitudine. Voglio ricordare che ciascun file XAML viene compilato per ottenere il corrispondente file BAML (Binary Application Markup Language). Come dice Nathan…
BAML is a compressed declarative format that is faster to load and parse (and smaller in size) than plain XAML.
In altre parole, XAML è efficiente quando stiamo sviluppando, perchè è leggibile, chiaro e semplice. BAML è efficiente a run-time, perchè è compresso e più piccolo in termini di bytes (e forse questo è quello che ci interessa di più).
Che poi su determinati PC un’applicazione WPF sia lenta dipende da una miliardata di motivi, dalla scheda grafica (hardware) a cosa fa realmente l’applicazione mentre è aperta e sta girando (software)…