Mi capita di controllare le prestazioni di un'applicazione ASP.NET MVC che stiamo costruendo. Stavo per inserire una vista parziale in un loop, e per curiosità ho controllato quanto tempo ci voleva per rendere la pagina. Il risultato non è stato buono.Visualizzazioni parziali ASP.NET MVC lente?
Ho bisogno di fare più indagini conclusive, ma nel caso ci fosse qualcuno con problemi simili o più approfondimenti, ecco quello che ho finora. Innanzitutto, dovrei dire che tutti i risultati e le misurazioni sono stati eseguiti dopo il caricamento di più pagine e che ho impostato <compilation debug="false">
nel mio web.config.
- Sembra che un solo rendering parziale incida circa 5 ms di hit (almeno nel mio ambiente). Quando inserisco il contenuto effettivo della vista parziale, ottengo praticamente 0 ms.
- Quando includo una vista parziale vuota su un ciclo di circa 70 elementi, il tempo di rendering totale aumenta di ~ 60 ms. Quindi c'è presumibilmente del caching, ma non è l'ideale.
- Ho eseguito il debug di ASP.NET MVC e ho scoperto che le viste parziali sono memorizzate nella cache, ma memorizza solo i percorsi degli ascx. Le viste effettive vengono quindi istanziate ogni volta utilizzando il metodo BuildManager.CreateInstanceFromVirtualPath.
- E ora il bit interessante: quando includi la stessa vista parziale usando la sintassi WebForms (
<my:UserContol runat="server" />
), gli extra 60ms vanno via.
Quindi, in base alle osservazioni precedenti, sembra che il colpevole sia il metodo BuildManager.CreateInstanceFromVirtualPath. Forse, non è stato pensato per essere chiamato più volte. Presumibilmente le Webform non la usano; o usarlo in qualche modo solo una volta per ogni ascx?
Quindi, la tua domanda è; le viste parziali sono più lente dei contenuti inline, a cui hai già la risposta. :) – bzlm
La domanda era se fosse possibile ottenere le stesse prestazioni di in Webforms. –
60 ms non è lento per me. – jfar