2013-03-14 16 views
34

Próbuję użyć CDN do ładowania jquery. Przeczytałem artykuł this i wydaje się, że powinien być bardzo prosty.Używanie CDN w pakiecie skryptów MVC. czego mi brakuje?

Mój pakiet skryptów jest zdefiniowany następująco.

bundles.UseCdn = true; 
bundles.Add(new ScriptBundle("~/bundles/jquery", "http://ajax.aspnetcdn.com/ajax/jQuery/jquery-1.7.1.min.js").Include(
         "~/Scripts/jquery-{version}.js")); 

jestem tym go na stronie w następujący sposób:

<!DOCTYPE html> 
<html> 
<head> 
    <meta charset="utf-8" /> 
    <meta name="viewport" content="width=device-width" /> 
    <title>@ViewBag.Title</title> 
    @Styles.Render("~/Content/css") 
    @Scripts.Render("~/bundles/modernizr") 
</head> 
<body> 
    @RenderBody() 

    @Scripts.Render("~/bundles/jquery") 
    @RenderSection("scripts", required: false) 
</body> 
</html> 

Ale kiedy patrzę na Firebug wydaje się, że jQuery jest ładowany z localhost. firebug inspection

Próbowałem zarówno kompilacji realease i debugowania /. Czego mi brakuje? Myślę, że powinno to być całkiem proste. Dzięki.

+1

Sprawdź to powiązane i bardzo ciekawy post http: //www.asp.net/mvc/tutorials/mvc-4/bundling-and-minification – Jaider

Odpowiedz

42

uruchomić aplikację w trybie debug="false" lub korzystania BundleTable.EnableOptimizations = true;

+3

FWIW: Nie jestem pewien, ile osób zdaje sobie sprawę z tej własności ... użyj if (Debugger.IsAttached) w tym scenariuszu do załadowania przez "debugowanie" skryptów, a w "else" wyzwalam BundleTable.EnableOptimizations = true ręcznie, zamiast polegać na web.config. Jeśli pracujesz w środowisku używającym IIS a hosta rozwoju Asp.net, oznacza to, że jeśli chcesz debugować swoje skrypty, w najgorszym przypadku musisz wrócić i pamiętać o uruchomieniu IDE, a następnie odświeżyć stronę, aby uzyskać wróć do pełnych tekstowych skryptów. Mam nadzieję, że to pomaga komuś. –

+0

Przepraszam, zapomniałem wspomnieć.Gwarantuje to również, że nigdy nie zapomnę włączyć optymalizacji lub skompilować właściwą drogę podczas wdrażania itp. Nie jest to zwykle problem z produkcją, ale może to być problem z witrynami QA itp., W których chcesz zapewnić, że Twój zespół testowy jest praca ze zminiaturyzowanymi wersjami w celu zapewnienia stabilności. –

+1

'BundleTable.EnableOptimizations = true;' zmieni go na cały czas ** ** – Liam

7

Upewnij się, że nie jesteś w trybie debugowania.

bundles.Add(new ScriptBundle("~/bundles/jquery", "http://ajax.aspnetcdn.com/ajax/jQuery/jquery-1.7.1.min.js") 

ustawić BundleTable.EnableOptimizations = true; // jeśli chcesz używać trybu debugowania

jQuery zostanie wezwany z CDN w trybie uwolnienia i wersji debugowania jQuery zostaną pobrane lokalnie w trybie debugowania. Gdy używają numeru CDN, powinieneś mieć mechanizm rezerwowy na wypadek, gdyby żądanie CDN się nie powiodło.

jeśli CDN Zapytanie nie możesz dostarczyć zwrotnego

<script type="text/javascript"> 
      if (typeof jQuery == 'undefined') { 
       var e = document.createElement('script'); 
       e.src = '@Url.Content("~/Scripts/jquery-1.7.1.js")'; 
       e.type = 'text/javascript'; 
       document.getElementsByTagName("head")[0].appendChild(e); 

      } 
     </script> 
+0

@downvoter zostaw komentarz. Edytowałem odpowiedź. –

+2

Mogły one zostać odrzucone, ponieważ Twój zastępca CDN umieszcza odnośnik do skryptu w nagłówku, co jest generalnie nierozważne. –

+1

Zamiast wpisywać kod JS, można określić wyrażenie zastępcze CDN w klasie BundleConfig w następujący sposób: jquery.CdnFallbackExpression = "window.jQuery"; –

13

Właściwie można napisać @RaviGadag swoją metodę krótszy w przypadku korzystania z najnowszej wersji ASP.NET MVC. W ten sposób nie trzeba pisać fallback siebie w układ:

public static void RegisterBundles(BundleCollection bundles) 
{ 

    bundles.UseCdn = true; 

    var jqueryCdnPath = "http://ajax.aspnetcdn.com/ajax/jQuery/jquery-2.1.3.min.js"; 
    var jqueryBundle = new ScriptBundle("~/bundles/jquery", jqueryCdnPath).Include("~/Scripts/jquery-{version}.min.js"); 
    jqueryBundle.CdnFallbackExpression = "window.jQuery"; 
    bundles.Add(jqueryBundle); 

    // ... 

    BundleTable.EnableOptimizations = true; 
} 

wersje jquery w Content Delivery Network (CDN): http://www.asp.net/ajax/cdn#jQuery_Releases_on_the_CDN_0

+2

Powinien to być "window.jQuery", a nie "window.jquery". W języku JavaScript jest rozróżniana wielkość liter. – arni

+0

Dzięki @arni, zmieniłem go w kodzie. – juFo

Powiązane problemy