2012-03-13 64 views
4

我試圖使用縮小CSS和JavaScript應用微軟Web優化

http://blogs.msdn.com/b/cdndevs/archive/2012/01/23/javascript-and-css-minifying-bundling-with-the-microsoft-web-optimization-nuget-package.aspx

來縮小和捆綁我的CSS和JS文件

所有的例子我已經能夠找到所有將所有腳本包含在masterpage/_layout文件中。

我希望能有一個

@RenderSection("Script", false) 

在我_layout文件,並從我的「子視圖」像這樣

@section Script { 
<script src="@Url.Content("~/Scripts/Configuration/Configuration.js")" type="text/javascript"></script> 
} 

添加腳本現在的問題是我如何動態地添加文件捆綁和強制緩存半身像?

現在我有這個

public static void AddBundleFile(this HtmlHelper helper, string path, Type type, int index) 
    { 
     var bundle = BundleTable.Bundles.GetRegisteredBundles() 
      .Where(b => b.TransformType == type) 
      .First(); 

     bundle.AddFile(path); 
    } 

從我的「子視圖」,但包文件永遠不會更新添加文件..

+0

我想我解決最這個問題,你是否仍然需要緩存剋星的幫助?你可以使用構建信息來獲得一個好的緩存。 – 2012-05-24 05:26:38

回答

3

我不是100%肯定你遇到什麼部分問題。這聽起來像你想動態地包含捆綁包?我真的試圖遠離使用任何動態抓取JS的機制,然後以任何特定的順序合併/合併它。

遲早,您將需要對JS以什麼順序包含的細粒度控制。您越早解決這個問題,您的應用程序將成爲更多未來的證明。令人沮喪的是,他們甚至建立了將所有腳本自動捆綁到一個文件夾中的能力,這實在太糟糕了。

所以你只剩下極小的煩惱,不得不指定你的JavaScript文件和包的包含順序。我們通過維護應用程序啓動時使用的簡單List<string>來實現此目的。

現在我認爲對於我們的使用,我們可以通過僅僅一個網站的大包來獲得,但是我可以看到設置了指定包的能力,然後指定包的包含順序。最後你會以List<T>結束。

這裏就是我們的腳本局部的樣子,它讓我們用一個包或使用單獨包含的JavaScript文件之間進行動態切換:

@if (NameSpace.UI.UseBundledResources) // set in the web.config, different per environment 
{ 
    <script src="@Url.ContentNoCache("~/bundle.js")" type="text/javascript"></script>  
} 
else 
{ 
    foreach (var file in NameSpace.UI.JavaScriptFileNames) 
    { 
    <script src="@Url.ContentNoCache(file)" type="text/javascript"></script> 
    } 
} 

和我們的應用程序啓動

var customJsFiles = NameSpace.UI.JavaScriptFileNames; 
var myJSBundle = new Bundle("~/bundle.js", typeof(JsMinify)); 
customJsFiles.ForEach(f => myJSBundle.AddFile(f)); 
BundleTable.Bundles.Add(myJSBundle); 
+0

感謝您的支持:-) – mimo 2012-05-24 07:44:08