Asp.Net静态资源动态压缩之WebOptimization
一、Asp.Net中对Css/Js的动态压缩工具 WebOptimization
在Asp.NetMVC自带的模板项目中自动引入了当前WebOptimization工具。如果使用的空模板Nuget命令安装或者使用Nuget管理工具安装
Install-Package Microsoft.AspNet.Web.Optimization
CodePlex源代码地址:http://aspnetoptimization.codeplex.com/
Nuget命令地址:http://www.nuget.org/packages/Microsoft.AspNet.Web.Optimization/
目前的版本是:2014年2月20日,Microsoft ASP.NET... 1.1.3 (this version)
程序包依赖:
- Microsoft.Web.Infrastructure (>= 1.0.0)
- WebGrease (>= 1.5.2)

二、特别说明
1. BundleTable.EnableOptimizations = true;
指定启用绑定规则,默认模式下本地测试不启用动态压缩,发布IIS后会启用。
2.CssRewriteUrlTransform 类定义了css中的url的先对路径处理,如果合并文件的目录结构和原始css的目录不再同一级的时候,需要用到该类。
处理的结果是生成的url都是从网站根目录开始查找。
3.JsMinify,Js的压缩进行了代码混淆处理,但是没有对js中指定样式的url进行处理,这一点需要注意,特别是在目录结构不再同一级的时候。
4.绑定的地址如果不指定扩展名的时候,注意不能和路由中的地址相同,否则会冲突。
例如:绑定生成js文件:‘~/Myjs’,那么MyJsController控制器将路由不到了
5.Web.Optionmization动态压缩处理的文件内容是在内存中,而不是将文生成好的文件存储在磁盘(这一点还没更具体验证)。
摘自源代码:
/// <summary>
/// Stores the response for the bundle in the cache, also sets up cache depedencies for the virtual files
/// used for the response
/// </summary>
/// <param name="context"></param>
/// <param name="bundle"></param>
/// <param name="response"></param>
public void Put(BundleContext context, Bundle bundle, BundleResponse response) {
List<string> paths = new List<string>();
paths.AddRange(response.Files.Select(f => f.VirtualFile.VirtualPath));
paths.AddRange(context.CacheDependencyDirectories);
string cacheKey = bundle.GetCacheKey(context);
// REVIEW: Should we store the actual time we read the files?
CacheDependency dep = context.VirtualPathProvider.GetCacheDependency(context.BundleVirtualPath, paths, DateTime.UtcNow);
context.HttpContext.Cache.Insert(cacheKey, response, dep);
bundle.CacheKeys.Add(cacheKey);
}
三、使用步骤
1.新建MVC项目,安装WebOptimaization工具
2.在App_Start文件夹中添加BundleConfig.cs程序启动注册代码
public class BundleConfig
{
public static void RegisterBundles(BundleCollection bundles)
{
//特别说明
//1.绑定的地址如果不指定扩展名的时候,注意不能和路由中的地址相同,否则会冲突
// 例如:绑定生成js文件:‘~/Myjs’,那么MyJsController控制器将路由不到了
//指定启用绑定规则
BundleTable.EnableOptimizations = true; /**************Css内容压缩**********/
//Css样式捆绑
bundles.Add(new StyleBundle("~/Content/common").Include(
"~/content/site.css",
"~/content/bootstrap.min.css"
));
//指定重写样式中的url相对地址
//css在引入的时候可以不用关心目录结构
bundles.Add(new StyleBundle("~/content/mystyle").Include(
"~/content/css/back.css",
new CssRewriteUrlTransform()
).Include(
"~/content/css/animate.css"
)); /**********Javascript内容压缩混淆**********/
//Js捆绑
//特别说明,可以指定模糊版本号处理
bundles.Add(new ScriptBundle("~/bundles/jquery").Include(
"~/scripts/jquery-{version}.min.js"
));
bundles.Add(new ScriptBundle("~/bundles/bootstrap").Include(
"~/scripts/bootstrap.min.js"
));
//特别说明,目前没有对js中配置url进行处理
//在使用的时候需要注意目录结构
bundles.Add(new ScriptBundle("~/MyJs").Include(
"~/content/back.js"
));
}
}
3.在Global.asax启动中注册
protected void Application_Start(object sender, EventArgs e)
{
//注册路由
RouteConfig.RegisterRoutes(RouteTable.Routes);
//程序启动时注册静态资源处理
BundleConfig.RegisterBundles(System.Web.Optimization.BundleTable.Bundles);
}
4.前台使用:
@Styles.Render("~/Content/common")
@Scripts.Render("~/bundles/jquery")
@Scripts.Render("~/bundles/bootstrap")
@Styles.Render("~/content/mystyle")
@*手动引入js中指定url是正确的*@
@*<script src="~/Scripts/MyJs/Back.js"></script>*@
@Scripts.Render("~/MyJs")
生成链接:

JS的混淆处理实例:
源代码:
$(function () {
myInitOnLoad();
function myInitOnLoad() {
$('.back2').css({
background: 'url("images/newico.gif") no-repeat',
width: 50,
height: 50
});
}
});
处理后:

相关文章:
http://www.cnblogs.com/libingql/archive/2013/12/22/3486269.html
http://www.jb51.net/article/84331.htm
http://www.cnblogs.com/dudu/p/3148004.html
Asp.Net静态资源动态压缩之WebOptimization的更多相关文章
- asp生成静态HTML(动态读取)
这样的代码多用于我们没有实现设计生成静态的功能,但又想临时将一些动态页面生成静态的,直接获取动态内容并保存为静态的 复制代码代码如下: <!--#include file="admin ...
- 静态资源压缩(GZIP) 专题
1.开GZIP有什么好处?答:Gzip开启以后会将输出到用户浏览器的数据进行压缩的处理,这样就会减小通过网络传输的数据量,提高浏览的速度.Tips:如果网站的用户分布比较分散,并且静态文件过大,可以将 ...
- 【asp.net core 系列】5 布局页和静态资源
0. 前言 在之前的4篇的内容里,我们较为详细的介绍了路由以及控制器还有视图之间的关系.也就是说,系统如何从用户的HTTP请求解析到控制器里,然后在控制器里处理数据,并返回给视图,在视图中显示出来.这 ...
- Hexo瞎折腾系列(5) - 使用hexo-neat插件压缩页面静态资源
为什么要压缩页面静态资源 对于个人博客来说,优化页面的访问速度是很有必要的,如果打开你的个人站点,加载个首页就要十几秒,页面长时间处于空白状态,想必没什么人能够忍受得了吧.我个人觉得,如果能把页面的加 ...
- 转转hybrid app web静态资源离线系统实践
一.前言 目前的转转app是一个典型的hybrid app,采用的是业内主流的做法: 客户端内有大量业务页面使用webview内加载h5页面承载. 其优点是显而易见的,即:web页面上线频度满足快速迭 ...
- Spring Boot静态资源处理
Spring Boot静态资源处理 8.8 Spring Boot静态资源处理 当使用Spring Boot来开发一个完整的系统时,我们往往需要用到前端页面,这就不可或缺地需要访问到静态资源,比如图片 ...
- SpringBoot第四集:静态资源与首页定(2020最新最易懂)
SpringBoot第四集:静态资源与首页定(2020最新最易懂) 问题 SpringBoot构建的项目结构如下:没有webapp目录,没有WEB-INF等目录,那么如果开发web项目,项目资源放在那 ...
- ASP.NET MVC 静态资源打包和压缩问题小记
ASP.NET MVC 中有个 BundleConfig 用于静态资源的打包和压缩,我在使用的过程中遇到一些问题,现在做下总结,并给出具体的解决方案. 问题一:打包压缩后的 JavaScript 和 ...
- Nginx的静态资源缓存以及压缩
Nginx是一款轻量级的网页服务器.反向代理器以及电子邮件代理服务器.Nginx采用的是异步非阻塞的通信机制(epoll模型),支持更大的并发连接.所谓的epoll模型:当事件没有准备好时,就放入ep ...
随机推荐
- Java 回调函数
下面使用java回调函数来实现一个测试函数运行时间的工具类: 如果我们要测试一个类的方法的执行时间,通常我们会这样做: public class TestObject { /** * 一个用来被测试的 ...
- 惊人事实 z
- POJ 3159 Candies 差分约束dij
分析:设每个人的糖果数量是a[i] 最终就是求a[n]-a[1]的最大值 然后给出m个关系 u,v,c 表示a[u]+c>=a[v] 就是a[v]-a[u]<=c 所以对于这种情况,按照u ...
- Sum It Up
http://acm.hdu.edu.cn/showproblem.php?pid=1258 Sum It Up Time Limit: 2000/1000 MS (Java/Others) M ...
- JavaScript下拉框去除重复内容
下拉框去除重复内容 <script type="text/javascript" src="http://www.joleye.com/libraries/java ...
- hive的安装步骤
在node2里安装一下hive1.2.1,步骤如下: 1.解压hive的安装包 2.改变目录:mv apache-hive-1.2.1-bin /home/install/hive-1.2 3.vi ...
- 股票中的数学:EMA的推导01
说明:本人并不炒股,原因很简单:没钱.当然了,作为一名IT工作者,因为工作需要和个人兴趣,就有了本系列文章.阅读本系列文章不需要任何高深的知识,哪怕是一个像我这样从未真正炒过股的人也没关系.但本文还是 ...
- Java笔记(二十六)……IO流上 字节流与字符流
概述 IO流用来处理设备之间的数据传输 Java对数据的操作时通过流的方式 Java用于操作流的对象都在IO包中 流按操作的数据分为:字节流和字符流 流按流向不同分为:输入流和输出流 IO流常用基类 ...
- BOM 和 JavaScript 中的 trim
今天遇到一个 IE7 下 JSON.parse 失败的问题.经过排查发现:服务端某个配置文件编码是 UTF-8 + BOM,输出的字符串最开始包含了 BOM 字符,不是合法的 JSON. IE7 不支 ...
- nyoj 325 zb的生日
01背包 zb的生日 时间限制:3000 ms | 内存限制:65535 KB 难度:2 描述 今天是阴历七月初五,acm队员zb的生日.zb正在和C小加.never在武汉集训.他想给这两位兄 ...