Come abbiamo visto nei precedenti script, la nuova funzionalità di bundling degli script di ASP.NET MVC 4 permette di gestire le referenze tramite CDN. Purtroppo, però, i bundle non posseggono un sistema di fallback su referenze locali, come avviene, invece, in Web Forms sfruttando lo ScriptManager, in grado di gestire il caso in cui la risorsa su CDN non sia disponibile.
Questo limite è facilmente aggirabile realizzando un semplice HTML helper come quello nel codice in basso:
public static IHtmlString RenderCdnBundle(this HtmlHelper html, string bundleVirtualPath, string checkFunction) { ScriptBundle bundle = BundleTable.Bundles.GetBundleFor(bundleVirtualPath) as ScriptBundle; var result = Scripts.Render(bundleVirtualPath).ToString(); if (!string.IsNullOrEmpty(bundle.CdnPath) && !string.IsNullOrEmpty(checkFunction) && BundleTable.Bundles.UseCdn) { BundleCollection dummy = new BundleCollection(); dummy.Add(bundle); result += string.Format( "<script type=\"text/javascript\">\r\n//<![CDATA[\r\n(window.{0})||" + "document.write('<script type=\"text/javascript\" src=\"{1}\">" + "<\\/script>');//]]></script>", checkFunction, dummy.ResolveBundleUrl(bundleVirtualPath)); } return new HtmlString(result); }
Questo helper come primo passo recupera il bundle richiesto, in base al path, e ne determina il risultato. Successivamente, nel caso sia attiva la modalità CDN, utilizza il medesimo bundle per generare il link di fallback alla risorsa locale, sfruttando la stessa tecnica che abbiamo visto nel caso di Web Forms.
L'utilizzo di questo helper è estremamente semplice: basta infatti referenziarlo all'interno delle nostre View come nel codice seguente:
@this.Html.RenderCdnBundle("~/bundles/jquery", "jQuery")
Il secondo parametro è l'oggetto che deve essere testato per verificare il corretto caricamento dello script.
Commenti
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.
Approfondimenti
Effettuare il deploy di immagini solo da container registry approvati in Kubernetes
Inizializzare i container in Azure Container Apps
Eseguire operazioni sui blob con Azure Storage Actions
Utilizzare i primary constructor in C#
Load test di ASP.NET Core con k6
Potenziare Azure AI Search con la ricerca vettoriale
Determinare lo stato di un pod in Kubernetes
Come EF 8 ha ottimizzato le query che usano il metodo Contains
Usare un KeyedService di default in ASP.NET Core 8
Ottimizzazione dei block template in Angular 17
.NET Conference Italia 2023
Installare le Web App site extension tramite una pipeline di Azure DevOps
I più letti di oggi
- Utilizzare WebAssembly con .NET, ovunque
- ecco tutte le novità pubblicate sui nostri siti questa settimana: https://aspit.co/wkly buon week-end!
- Ottimizzare le performance delle collection con le classi FrozenSet e FrozenDictionary
- Utilizzare il trigger SQL con le Azure Function
- Ottimizzazione dei block template in Angular 17
- Disabilitare automaticamente un workflow di GitHub (parte 2)