Quando scegliamo di sfruttare una Content Delivery Network come sorgente per gli script contenuti in pagina, demandiamo a una terza parte l'onere di servire una porzione delle nostre pagine web. I vantaggi sono molteplici, dal risparmio di banda fino all'ottimizzazione dell'uso della cache del browser per il download; il problema fondamentale, però, è che perdiamo di fatto il controllo di parte dei nostri contenuti il cui download potrebbe fallire senza che ne abbiamo alcun preavviso.
Il controllo ScriptManager di ASP.NET 4.5 offre una funzionalità nella gestione di queste casistiche che risolve in maniera brillante questa problematica. Se creiamo un nuovo progetto ASP.NET Web Forms e diamo un'occhiata alla pagina Site.Master, possiamo notare che tramite ScriptManager sono referenziati tutti gli script necessari al funzionamento, tra i quali per esempio, jQuery e jQuery UI:
<asp:ScriptManager runat="server"> <Scripts> <asp:ScriptReference Name="jquery" /> <asp:ScriptReference Name="jquery.ui.combined" /> ... </Scripts> </asp:ScriptManager>
Per fornire questi contenuti tramite CDN, non dobbiamo far altro che abilitare la proprietà EnableCdn:
<asp:ScriptManager runat="server" EnableCdn="true" EnableCdnFallback="true"> ... </asp:ScriptManager>
In particolare, nel codice precedente, abbiamo impostato a true anche EnableCdnFallback, che come effetto produce il seguente markup:
<script type="text/javascript" src="http://ajax.aspnetcdn.com/ajax/jQuery/jquery-1.8.3.js"></script> <script type="text/javascript"> //<![CDATA[ (window.jQuery)||document.write('<script type="text/javascript" src="Scripts/jquery-1.8.3.js"><\/script>');//]]> </script>
Come possiamo notare, subito a valle della reference tramite CDN, viene aggiunto del codice JavaScript che verifica la presenza, nell'object model, di una definizione valida per jQuery e, in caso non sia disponibile, aggiunge una reference "locale". Questo consente di mantenere le nostre pagine ugualmente funzionanti anche nel caso in cui la CDN che stiamo sfruttando sia momentaneamente offline.
Commenti
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.
Approfondimenti
Montare blob e file share su Azure App Service
Sopprimere gli errori di concorrenza quando si elimina una entity con Entity Framework 7
Effettuare l'upload di un file via FTP con la libreria FluentFTP di .NET
Effettuare test di carico con Azure Load Testing
Utilizzare il browser per rilevare Javascript e CSS non utilizzati nel codice
Creare automaticamente una issue di GitHub
Gestire il timing sugli eventi all'interno di un'applicazione Blazor
Mostrare una preview durante l'upload di un'immagine in Blazor
Migrare un repository che contiene large file storage objects in GitHub
Utilizzare i metodi Linq MinBy e MaxBy per semplificare le ricerche degli elementi minimi e massimi in liste di oggetti complessi con LINQ
Utilizzare l'API del browser fetch
Creare un router per Single Page Application con l'evento navigate