mvc bundle功能(1)
现如今都提倡敏捷开发,快速开发,但是再要求速度的同时,还得保证质量!前端我是没办法,毕竟是直接要面向用户的,但是后台,解决方案那就多了,诸如extjs,bootstrap,kendoui,都可以解决。但是使用了这些第三方的东西,我们的后台是漂亮了,效果也炫了,新的问题就来了,大量的引用js、css。
这是我用bootstrap、kendoui搭的一个标准后台,代码非常简洁,但是引用了很多样式和js,加载完这个页面发送了又16个请求,耗时1.36s。
有没有一种方法可以把这些js和css合并起来并且压缩一下呢?这样我们的后台效果不就更好了吗?当然有,.net mvc自带的bundle功能。我们先看使用了该功能之后是什么效果
很明显,请求数减少了,响应时间也减少了,那我们来看看bundle到底是如何实现的。
1 public class BundleConfig 2 { 3 // 有关 Bundling 的详细信息,请访问 http://go.microsoft.com/fwlink/?LinkId=254725 4 public static void RegisterBundles(BundleCollection bundles) 5 { 6 bundles.Add(new ScriptBundle("~/bundles/jquery").Include( 7 "~/assets/global/plugins/jquery-1.11.0.min.js")); 8 9 10 // The Kendo JavaScript bundle 11 bundles.Add(new ScriptBundle("~/bundles/kendo").Include( 12 "~/Scripts/kendo/kendo.all.min.js", // or kendo.all.* if you want to use Kendo UI Web and Kendo UI DataViz 13 "~/Scripts/kendo/cultures/kendo.culture.zh-CN.min.js", 14 "~/Scripts/kendo/kendo.aspnetmvc.min.js" 15 )); 16 17 // Add CSS bundle 18 bundles.Add(new StyleBundle("~/bundles/upcss").IncludeDirectory("~/css/", "*.css")); 19 20 // Add JS bundle 21 bundles.Add(new ScriptBundle("~/bundles/upjs").Include("~/js/jquery.js" 22 , "~/js/vendor/jquery.ui.widget.js" 23 , "~/js/tmpl.js" 24 , "~/js/load-image.js" 25 , "~/js/canvas-to-blob.js" 26 , "~/js/bootstrap.js" 27 , "~/js/bootstrap-image-gallery.js" 28 , "~/js/jquery.iframe-transport.js" 29 , "~/js/jquery.fileupload.js" 30 , "~/js/jquery.fileupload-fp.js" 31 , "~/js/jquery.fileupload-ui.js" 32 , "~/js/locale.js")); 33 bundles.Add(new ScriptBundle("~/bundles/upmain").IncludeDirectory("~/js/main", "*.js")); 34 35 36 37 // The Kendo CSS bundle 38 bundles.Add(new StyleBundle("~/Content/kendocss").Include( 39 "~/Content/kendo.common-bootstrap.min.css", 40 "~/Content/kendo.bootstrap.min.css", 41 "~/Content/kendo.dataviz.min.css" 42 )); 43 44 // The Kendo CSS bundle 45 bundles.Add(new Bundle("~/Content/kendo/css").Include( 46 "~/Content/kendo/kendo.common-bootstrap.min.css", 47 "~/Content/kendo/kendo.bootstrap.min.css", 48 "~/Content/kendo/kendo.dataviz.min.css" 49 )); 50 51 52 bundles.Add(new ScriptBundle("~/bundles/jqueryui").Include( 53 "~/Scripts/jquery-ui-{version}.js")); 54 55 bundles.Add(new ScriptBundle("~/bundles/jqueryval").Include( 56 "~/Scripts/jquery.unobtrusive*", 57 "~/Scripts/jquery.validate*")); 58 59 // 使用 Modernizr 的开发版本进行开发和了解信息。然后,当你做好 60 // 生产准备时,请使用 http://modernizr.com 上的生成工具来仅选择所需的测试。 61 bundles.Add(new ScriptBundle("~/bundles/modernizr").Include( 62 "~/Scripts/modernizr-*")); 63 64 bundles.Add(new StyleBundle("~/Content/css").Include("~/Content/site.css")); 65 66 bundles.Add(new StyleBundle("~/Content/themes/base/css").Include( 67 "~/Content/themes/base/jquery.ui.core.css", 68 "~/Content/themes/base/jquery.ui.resizable.css", 69 "~/Content/themes/base/jquery.ui.selectable.css", 70 "~/Content/themes/base/jquery.ui.accordion.css", 71 "~/Content/themes/base/jquery.ui.autocomplete.css", 72 "~/Content/themes/base/jquery.ui.button.css", 73 "~/Content/themes/base/jquery.ui.dialog.css", 74 "~/Content/themes/base/jquery.ui.slider.css", 75 "~/Content/themes/base/jquery.ui.tabs.css", 76 "~/Content/themes/base/jquery.ui.datepicker.css", 77 "~/Content/themes/base/jquery.ui.progressbar.css", 78 "~/Content/themes/base/jquery.ui.theme.css")); 79 } 80 }
首先需要首先需要配置Bundle
1 public class MvcApplication : System.Web.HttpApplication 2 { 3 protected void Application_Start() 4 { 5 AreaRegistration.RegisterAllAreas(); 6 7 WebApiConfig.Register(GlobalConfiguration.Configuration); 8 FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters); 9 RouteConfig.RegisterRoutes(RouteTable.Routes); 10 BundleConfig.RegisterBundles(BundleTable.Bundles); 11 AuthConfig.RegisterAuth(); 12 } 13 }
再全局注册Bundles