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 ...
随机推荐
- C#中OpenFileDialog的使用
string resultFile = ""; OpenFileDialog openFileDialog1 = new OpenFileDialog(); ...
- spring3 mvc使用注解方式时,不能扫描jar包里面的类
使用eclipse export工具时选中Add directory entries可以解决.
- POJ 3254 (状态压缩DP)
思路:状态压缩dp,用二进制位的1表示放了,0表示没有放.设dp[i][j],表示第i行状态为j时,前i行的方案数,状态转移方程就是 dp[i][j] += dp[i-1][k],j与k这两个状态不冲 ...
- NHibernate统一类封装代码
NHibernate已经成为.net主流的ORM框架,当然,在开发中如果需要使用NHibernate的话,我们一般会对她进行一次封装,以便在项目中使用更方便,以及对NHibernate有一个全局的控制 ...
- Robotium 系列(1)
之前也写过一些blog,可是没什么坚持.这个系列算是对之前工作的一个总结和提高:也与大家共同进步! 本文主要介绍的内容是: 1. 软件测试的基本概念 2. 自动化测试的概念 3. 手动测试和自动化测试 ...
- 【CSS】Intermediate7:Pseudo Elements
1.selector:pseudo element{property:value;} 2.first-letter first-line CSS3:: 与pseudo class 区别 old br ...
- Web Services and C# Enums -摘自网络
Web Service Transparency .NET support for web services is excellent in creating illusion of transpar ...
- iOS网络编程(三) 异步加载及缓存图片---->SDWebImage
@SDWebImage提供一个UIImageView的类别以支持加载来自网络的远程图片.具有缓存管理.异步下载.同一个URL下载次数控制和优化等特征. @SDWebImage的导入1.https:// ...
- Powerdesigner设置name与code不同时变化
Tools-General Options-Dialog Name to Code mirroring去掉对勾
- 第三周作业、实时操作系统µC/OS介绍及其它内容
作业要求 见<实时控制软件设计>第三周作业 1 阅读笔记--µC/OS 1.1 基本介绍 µC/OS是由Micrium公司研发的实时操作系统,以µC/OS-II或µC/OS-III为内核, ...