一、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)

程序包依赖:

二、特别说明

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的更多相关文章

  1. asp生成静态HTML(动态读取)

    这样的代码多用于我们没有实现设计生成静态的功能,但又想临时将一些动态页面生成静态的,直接获取动态内容并保存为静态的 复制代码代码如下: <!--#include file="admin ...

  2. 静态资源压缩(GZIP) 专题

    1.开GZIP有什么好处?答:Gzip开启以后会将输出到用户浏览器的数据进行压缩的处理,这样就会减小通过网络传输的数据量,提高浏览的速度.Tips:如果网站的用户分布比较分散,并且静态文件过大,可以将 ...

  3. 【asp.net core 系列】5 布局页和静态资源

    0. 前言 在之前的4篇的内容里,我们较为详细的介绍了路由以及控制器还有视图之间的关系.也就是说,系统如何从用户的HTTP请求解析到控制器里,然后在控制器里处理数据,并返回给视图,在视图中显示出来.这 ...

  4. Hexo瞎折腾系列(5) - 使用hexo-neat插件压缩页面静态资源

    为什么要压缩页面静态资源 对于个人博客来说,优化页面的访问速度是很有必要的,如果打开你的个人站点,加载个首页就要十几秒,页面长时间处于空白状态,想必没什么人能够忍受得了吧.我个人觉得,如果能把页面的加 ...

  5. 转转hybrid app web静态资源离线系统实践

    一.前言 目前的转转app是一个典型的hybrid app,采用的是业内主流的做法: 客户端内有大量业务页面使用webview内加载h5页面承载. 其优点是显而易见的,即:web页面上线频度满足快速迭 ...

  6. Spring Boot静态资源处理

    Spring Boot静态资源处理 8.8 Spring Boot静态资源处理 当使用Spring Boot来开发一个完整的系统时,我们往往需要用到前端页面,这就不可或缺地需要访问到静态资源,比如图片 ...

  7. SpringBoot第四集:静态资源与首页定(2020最新最易懂)

    SpringBoot第四集:静态资源与首页定(2020最新最易懂) 问题 SpringBoot构建的项目结构如下:没有webapp目录,没有WEB-INF等目录,那么如果开发web项目,项目资源放在那 ...

  8. ASP.NET MVC 静态资源打包和压缩问题小记

    ASP.NET MVC 中有个 BundleConfig 用于静态资源的打包和压缩,我在使用的过程中遇到一些问题,现在做下总结,并给出具体的解决方案. 问题一:打包压缩后的 JavaScript 和 ...

  9. Nginx的静态资源缓存以及压缩

    Nginx是一款轻量级的网页服务器.反向代理器以及电子邮件代理服务器.Nginx采用的是异步非阻塞的通信机制(epoll模型),支持更大的并发连接.所谓的epoll模型:当事件没有准备好时,就放入ep ...

随机推荐

  1. C#值类型以及默认值记录下

    C#的值类型有bool,byte,sbyte,decimal,double,float,int,uint,long,string等 如果我们擅长使用默认值,可以帮助我们减少带来赋值及代码编写. 比如我 ...

  2. Embedding Documents in Word 2007 by Using the Open XML SDK 2.0 for Microsoft Office

    Download the sample code This visual how-to article presents a solution that creates a Word 2007 doc ...

  3. Axis2 java调用.net webservice接口的问题(郑州就维)

    这是一个古老的问题,古老到从我若干年前遇到这样的问题就是一个解决之道:反复尝试.其实标准是什么,标准就是一个束缚,一种按既定规则的束缚,错点点,你的调用就可能不成功,不成功后你要花费大量的力气查找原因 ...

  4. Windows平台网站图片服务器架构的演进[转]

    构建在Windows平台之上的网站,往往会被业内众多架构师认为很“保守”.很大部分原因,是由于微软技术体系的封闭和部分技术人员的短视造成 的.由于长期缺乏开源支持,所以只能“闭门造车”,这样很容易形成 ...

  5. java常见机试题目(1)

    好久没写博客了,今天重新开始,发现自己学习的知识很糙,就是知道,也能说出来,但是很多知识点不清晰,不深入,所以呢,写个博客总结一些程序,理清概念. 1java中大小写字母转化,在java中存在api ...

  6. (6)s3c2440用I2C接口访问EEPROM

    在前面阅读理解了I2C的官方协议文档后,就拿s3c2440和EEPROM来验证一下. 本来是想用s3c2440的SDA和SCL管脚复用为GPIO来模拟的,但在没有示波器的情况下搞了一周,怎么都出不来, ...

  7. java 小结1(static ,final,泛型)

    static,final. (1)final: final:属于“终态”,意思就是不可以改变.可以修饰非抽象类,非抽象类的方法等.反正就是不能够再改变赋值了. 注意:1)fina类不能被继承,所以它没 ...

  8. CF402E Strictly Positive Matrix 传递闭包用强连通分量判断

    题目链接:http://codeforces.com/problemset/problem/402/E /**算法分析: 这道题考察了图论基本知识,就是传递闭包,可以构图用强联通分量来判断 */ #i ...

  9. POSIX-Centos查看rpm包安装位置及相关信息

    rpm -qifl `which svnserve`; http://www.ctohome.com/FuWuQi/56/122.html [国外服务器及ip租用价格] Centos6 kvm网桥配置 ...

  10. XXX 用户 is not in the sudoers file. This incident will be reported 的问题解决方案

    说的是,这种问题,是出现在ubuntu系统里. root@SparkSingleNode:/usr/local/jdk# pwd /usr/local/jdk root@SparkSingleNode ...