欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Asp.net MVC下使用Bundle合并、压缩js与css文件详解

程序员文章站 2022-10-12 10:34:24
前言 介绍本文的正式内容之前先引用《淘宝技术这十年》中一段话,对web前端稍微有点常识的人都应该知道,浏览器下一步会加载页面中用到的css、js(javascript)、...

前言

介绍本文的正式内容之前先引用《淘宝技术这十年》中一段话,对web前端稍微有点常识的人都应该知道,浏览器下一步会加载页面中用到的css、js(javascript)、图片等样式、脚本和资源文件。但是可能相对较少的人才会知道,你的浏览器在同一个域名下并发加载的资源数量是有限的,例如ie 6和ie 7是两个,ie 8是6个,chrome各版本不大一样,一般是4~6个。bundle是asp.net 4.5中的一个新特性,可 用来将js和css进行压缩(多个文件可以打包成一个文件,也可以说是合并多个文件),并且可以区分调试和非调试,在调试时不进行压缩,以原始方式显示出来,以方便查找问题。下面话不多说,来看看详细的介绍吧。

一个例子

新建asp.net mvc项目,在app_start文件夹中你可以看到一个叫做bundleconfig.cs的类,

Asp.net MVC下使用Bundle合并、压缩js与css文件详解

该类内容如下:

public class bundleconfig
 {
 // for more information on bundling, visit http://go.microsoft.com/fwlink/?linkid=301862
 public static void registerbundles(bundlecollection bundles)
 {
 bundles.add(new scriptbundle("~/bundles/jquery").include(
  "~/scripts/jquery-{version}.js"));

 bundles.add(new scriptbundle("~/bundles/jqueryval").include(
  "~/scripts/jquery.validate*"));

 // use the development version of modernizr to develop with and learn from. then, when you're
 // ready for production, use the build tool at http://modernizr.com to pick only the tests you need.
 bundles.add(new scriptbundle("~/bundles/modernizr").include(
  "~/scripts/modernizr-*"));

 bundles.add(new scriptbundle("~/bundles/bootstrap").include(
  "~/scripts/bootstrap.js",
  "~/scripts/respond.js"));

 bundles.add(new stylebundle("~/content/css").include(
  "~/content/bootstrap.css",
  "~/content/site.css"));
 }
 }

如上代码所示,压缩和合并分两种对象scriptbundle和stylebundle。

namespace system.web.optimization
{
 //
 // summary:
 // represents a bundle that does js minification.
 public class scriptbundle : bundle
 {
 //
 // summary:
 // initializes a new instance of the system.web.optimization.scriptbundle class
 // that takes a virtual path for the bundle.
 //
 // parameters:
 // virtualpath:
 // the virtual path for the bundle.
 public scriptbundle(string virtualpath);
 //
 // summary:
 // initializes a new instance of the system.web.optimization.scriptbundle class
 // that takes virtual path and cdnpath for the bundle.
 //
 // parameters:
 // virtualpath:
 // the virtual path for the bundle.
 //
 // cdnpath:
 // the path of a content delivery network (cdn).
 public scriptbundle(string virtualpath, string cdnpath);
 }
}

scriptbundle有两个构造函数,virtualpath:js文件的虚拟路径,cdnpath:js的网络cdn路径。stylebundle的构造函数的参数与scriptbundle相同。

在上面的代码片段中你可以看到

  • jquery-{version}.js:其中version是jquery的版本号,version是一个版本号的占位符。
  • jquery.validate*:*通配符,匹配所有。

上面的代码完成后,需要在global.asax的application_start事件中对其注册。

Asp.net MVC下使用Bundle合并、压缩js与css文件详解

如何使用?

在视图中,通过下面的代码实现对静态文件的引用。

Asp.net MVC下使用Bundle合并、压缩js与css文件详解

浏览

Asp.net MVC下使用Bundle合并、压缩js与css文件详解

怎么没起作用呢?bundle默认在调试的情况下,是没有开启打包压缩的,可以通过下面的2中方式进行开启。

Asp.net MVC下使用Bundle合并、压缩js与css文件详解

再浏览下

Asp.net MVC下使用Bundle合并、压缩js与css文件详解

你会发现jquery-1.10.2.js该文件在请求中已经不存在了,它已经被打包压缩在jquery?v=版本号,这个文件里面了。

另外一种打开打包压缩的方式,在web.config文件中中:

Asp.net MVC下使用Bundle合并、压缩js与css文件详解

总结

上面就是对bundle的用法介绍,对静态文件打包压缩可以减少请求次数,资源加载的速度。希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对的支持。