一、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. Javascript 多线程?

    最近在遇到一个问题:HTML页面中的页面无法刷新,只能在底层全部处理完成后才能进行页面刷新.在里面已经采用SetTimeout进行了处理,但是明显没有达到预期的效果. 主要的原因是对SetTimeou ...

  2. Nginx与X-Sendfile

    X-accel模块允许由后台通过返回的头来决定投递静态文件.为什么要这么做呢?试想一下我们经常碰到的这种情况,在有的论坛中,下载资源需要登录认证.权限核查.积分扣除或者是积分增加等等,对于Nginx来 ...

  3. [POJ1012]Joseph

      Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 50596   Accepted: 19239 Description T ...

  4. bzoj 1925 [Sdoi2010]地精部落(DP)

    Description 传说很久以前,大地上居住着一种神秘的生物:地精. 地精喜欢住在连绵不绝的山脉中.具体地说,一座长度为 N 的山脉 H可分 为从左到右的 N 段,每段有一个独一无二的高度 Hi, ...

  5. 微软Azure 存储管理器的简单介绍

    Windows Azure存储用户经常希望能够在“管理器”中查看他们的数据,管理器指的是一款可用于显示存储帐户数据的工具.我们之前提供了我们所知的存储管理器列表.在本文中,我们将对此列表进行更新,使其 ...

  6. POJ2891 - Strange Way to Express Integers(模线性方程组)

    题目大意 求最小整数x,满足x≡a[i](mod m[i])(没有保证所有m[i]两两互质) 题解 中国剩余定理显然不行....只能用方程组两两合并的方法求出最终的解,刘汝佳黑书P230有讲~~具体证 ...

  7. 用g++ 编译 ffmpeg 编译出现 error: 'UINT64_C' was not declared in this scope 或 missing -D__STDC_CONSTANT_MACROS

    在 libavutil/common.h 下 添加如下,即可解决 #ifdef __cplusplus#define __STDC_CONSTANT_MACROS#ifdef _STDINT_H#un ...

  8. 教程-Delphi MSComm 实时串口通讯

    Delphi  MSComm 实时串口通讯 MSComm控件具有丰富的与串口通信密切相关的属性,提供了对串口进行的多种操作,进而使串行通信变得十分简便.MSComm的控件属性较多,常用的属性如下:1) ...

  9. 读FCL源码系列之List<T>---让你知其所以然---内含疑问求大神指点

    序言 在.NET开发中,List<T>是我们经常用到的类型.前段时间看到其他部门小伙伴讨论“两个List(10W个元素)集合求并集,list1.Where(p=>list2.Cont ...

  10. Java多线程---------同步与死锁:synchronized;等待与唤醒:wait、notify、notifyAll;生命周期

    1.问题的引出 class MyThread implements Runnable{ private int ticket = 5 ; // 假设一共有5张票 public void run(){ ...