2014-04-24 20 views
8

Ho letto l'articolo su bundling and monification, in particolare sull'utilizzo di CDN, ma ci sono alcune cose non chiare.Utilizzo di CDN in bundle ASP.NET MVC

Avere l'esempio:

public static void RegisterBundles(BundleCollection bundles) 
{ 
    //bundles.Add(new ScriptBundle("~/bundles/jquery").Include(
    //   "~/Scripts/jquery-{version}.js")); 

    bundles.UseCdn = true; //enable CDN support 

    //add link to jquery on the CDN 
    var jqueryCdnPath = 
     "http://ajax.aspnetcdn.com/ajax/jQuery/jquery-1.7.1.min.js"; 

    bundles.Add(new ScriptBundle("~/bundles/jquery", 
       jqueryCdnPath).Include(
       "~/Scripts/jquery-{version}.js")); 

    // Code removed for clarity. 
} 
  1. C'è la possibilità di utilizzare il formato {version} di riferimenti CDN, come per i più "locali"?

  2. Qual è il punto di includere nei bundle la versione già miniata dello script, ad esempio jquery-1.7.1.min.js? Cosa succede se non esiste? Non dovrebbe cercare se il file .min esiste e/o generarlo rispettivamente?

risposta

0
  1. Non è possibile che io sappia. Ma puoi tenere una tabella di cdns e popolare quando i bundle sono caricati. Quando esce una nuova versione che desideri utilizzare, aggiungi/sostituisci la voce nel db.

    //get from db 
        List<string> cdns = new List<string>(); 
        foreach (string cdn in cdns) 
        { 
         bundles.Add(new ScriptBundle("~/bundles/jquery",cdn).Include("~/Scripts/jquery-{version}.js")); 
        } 
    
  2. Sono d'accordo sulla parte minima. Perché la parte non esiste della domanda, scorrere verso il basso e leggere "Uso di un CDN". C'è un esempio per mostrare come controllare. In sostanza, è necessario disporre di una copia locale come backup di cui si può fare riferimento a un altro cdn, suppongo.

+0

Grazie. Marchio. ma per la prima domanda, chiedo concretamente l'uso della CDN, non quella "generale" (locale, in occorrenza). Nell'esempio c'è il. Penso che per cdn non cerchi la versione min, questo è il motivo per cui la usiamo direttamente nell'esempio. – serhio

+0

Il mio male, l'ho letto male. Non è possibile utilizzare il controllo delle versioni poiché si tratta di un file che risiede all'esterno dell'app. Un'alternativa sarebbe avere una tabella nel tuo db che possa mantenere l'ultima versione in una riga che a sua volta crea dinamicamente il tuo pacchetto. In questo modo puoi cambiare il cdn senza dover spingere la tua app. –

0

C'è la possibilità di utilizzare il formato {version} di riferimenti CDN, come per i più "locali"?

Il segnaposto {version} serve principalmente a risparmiare tempo digitando il numero esplicito in modo che la compilazione possa cercare i file sul disco locale. Poiché non è possibile eseguire la stessa ricerca su un server remoto, è necessario specificare un URL esatto in modo esplicito.

Qual è il punto di includere nei pacchi già minified versione dello script, come jquery-1.7.1.min.js? Cosa succede se non esiste ?

Il vantaggio chiave di questa sintassi di raggruppamento è di passare in modo condizionale tra URL diversi per tag di script e di stile nell'HTML finale.

Quando un file richiesto non esiste, il processo di raggruppamento salterà.

Non dovrebbe cercare se il file .min esiste e/o generarlo rispettivamente ? Sì, si applica minification prima di bundling, come si può vedere: enter image description here

2
using System.Web; 
using System.Web.Optimization; 

namespace MvcApp 
{ 
    public class BundleConfig 
    { 
     public static void RegisterBundles(BundleCollection bundles) 
     { 
      bundles.Add(new ScriptBundle("~/bundles/jquery", "https://ajax.googleapis.com/ajax/libs/jquery/2.1.4/jquery.min.js").Include("~/Scripts/jquery-{version}.js")); 

      bundles.Add(new ScriptBundle("~/bundles/bootstrap","https://maxcdn.bootstrapcdn.com/bootstrap/3.3.4/js/bootstrap.min.js").Include("~/Scripts/bootstrap.js")); 

      bundles.Add(new StyleBundle("~/Content/css", "https://maxcdn.bootstrapcdn.com/bootstrap/3.3.4/css/bootstrap.min.css").Include("~/Content/bootstrap.css")); 

      BundleTable.EnableOptimizations = true; 
      bundles.UseCdn = true; 
     } 
    } 
} 

Che un sacco di sviluppatori non si rese conto è che ci sia un sovraccarico per la classe costruttore ScriptBundle e StyleBundle, che prende due parametri di stringa, ad esempio per ScriptBundle, sarebbe ScriptBundle (stringa, stringa) e per StyleBundle sarebbe StyleBundle (stringa, stringa).Il primo parametro è il percorso virtuale e il secondo parametro è cdnPath.

Ci si potrebbe chiedere, se sono necessari due parametri, come fa MVC a sapere quale utilizzare? Bene, la posizione cdn viene utilizzata solo quando la proprietà BundleTable.EnableOptimizations è impostata su true.

L'impostazione della proprietà EnableOptimization su true indica a MVC di utilizzare l'uso della versione ridotta del file anziché della versione normale.

Quando questa proprietà è impostata su true e il percorso cdn è presente, MVC utilizzerà il percorso cdn anziché il percorso virtuale locale.
C'è un'altra proprietà che devi impostare su true e che è il bundles.UseCdn.
Ciò indica a MVC di utilizzare la posizione cdn anziché la versione locale. Se BundleTable.EnableOptimization è impostato su false, quindi la versione locale viene utilizzata automaticamente come ripiego poiché la versione cdn è la versione ridotta.

leggere questo blog il suo chiaro sulla tua pensare:

http://www.techjunkieblog.com/2015/06/aspnet-mvc-5-configure-bundleconfig.html

Problemi correlati