我知道這是一個老話題,但我來到這裏尋找一種實際的方式捆綁CDN資源。從@Chris Pratt的回答中,我明白這是不可能的。
如果您想知道,我正在根據Google's Web Performance Best Practises優化現有項目,當有多個腳本標記時,得分較低,而當所有腳本都綁定到一個腳本參考中時,得分較高。
我需要一種方法來按順序捆綁所有CDN腳本資源以及本地資源。我在這個github repo上工作,解決了我的問題。
有了它,你可以建立一個捆綁包列表,每個捆綁包都包含對cdn資源的引用,保存到本地的資源,以及一個布爾值,指示是否要將該捆綁包縮小。
List<Bundle> jsBundles = new List<Bundle>();
jsBundles.Add(new Bundle("https://cdnjs.cloudflare.com/ajax/libs/jquery/3.1.0/jquery.min.js", @"~/jquery.min.js", Bundle.BundleType.JavaScript, false));
jsBundles.Add(new Bundle("https://cdnjs.cloudflare.com/ajax/libs/jqueryui/1.12.0/jquery-ui.min.js", @"~/jquery-ui.min.js", Bundle.BundleType.JavaScript, false));
jsBundles.Add(new Bundle(@"~/my-local-script.js", Bundle.BundleType.JavaScript, true));
要放置在頁面上,你可以使用
@jsBundles.Load();
這將處理列表中的所有包,下載內容對於尚未在過去24小時內被下載包(它更新每24小時或Web應用程序重新啓動時)。下載的所有內容將被放置在本地文件(如有指定)。
所有內容將被合併到最終結果中,該結果將被拖放到腳本標記(或CSS的鏈接標記)的頁面中。
Load函數還接受最終腳本/ css內容的本地文件URL。如果指定,則會給出帶有src的標記給該本地文件的相對路徑。例如。
@jsBundles.Load("~/js/all-my-scripts.js");
上面的語句將返回類似:
<script src="~/js/all-my-scripts.js"></script>
異步屬性可以被添加到腳本標籤如果提供的加載函數的第二個參數。
它也適用於css cdn資源。例如。
List<Bundle> cssBundles = new List<Bundle>();
cssBundles.Add(new Bundle("https://cdnjs.cloudflare.com/ajax/libs/jqueryui/1.12.0/jquery-ui.min.css", @"~/jquery.ui.css", Bundle.BundleType.CSS, false));
cssBundles.Add(new Bundle(@"~/css/my-local-style.css", Bundle.BundleType.CSS, true));
@cssBundles.Load("~/css/all-my-styles.css");
這是爲了那些喜歡我的人,來到這裏尋找一種實際捆綁CDN資源的方式。
所以與您的解決方案在哪裏存儲cdn路徑在該代碼我有同樣的問題,我需要還加載多個CSS使用cdn的捆綁,所以請你可以讓我知道該怎麼做? – coderwill