Asp.net 程序优化js,css合并与压缩
访问时将js和css压缩并且缓存在客户端,
采用的是Yahoo.Yui.Compressor组件还完成的,从这里可下载
创建一个IHttpHandler来处理文件
1 public class CombineFiles : IHttpHandler
2 {
3 private const string CacheKeyFormat = "_CacheKey_{0}_";
4
5 private const bool IsCompress = true; //需要压缩
6
7 public bool IsReusable
8 {
9 get
10 {
11 return false;
12 }
13 }
14
15 public void ProcessRequest(HttpContext context)
16 {
17 HttpRequest request = context.Request;
18 HttpResponse response = context.Response;
19
20 string cachekey = string.Empty;
21
22 string type = request.QueryString["type"];
23 if (!string.IsNullOrEmpty(type) && (type == "css" || type == "js"))
24 {
25 if (type == "js")
26 {
27 response.ContentType = "text/javascript";
28
29 }
30 else if (type == "css")
31 {
32 response.ContentType = "text/css";
33 }
34
35 cachekey = string.Format(CacheKeyFormat, type);
36
37 CompressCacheItem cacheItem = HttpRuntime.Cache[cachekey] as CompressCacheItem;
38 if (cacheItem == null)
39 {
40 string content = string.Empty;
41 string path = context.Server.MapPath("");
42 //找到这个目录下所有的js或css文件,当然也可以进行配置,需求请求压缩哪些文件
43 //这里就将所的有文件都请求压缩
44 string[] files = Directory.GetFiles(path, "*." + type);
45 StringBuilder sb = new StringBuilder();
46 foreach (string fileName in files)
47 {
48 if (File.Exists(fileName))
49 {
50 string readstr = File.ReadAllText(fileName, Encoding.UTF8);
51 sb.Append(readstr);
52 }
53 }
54
55 content = sb.ToString();
56
57 // 开始压缩文件
58 if (IsCompress)
59 {
60 if (type.Equals("js"))
61 {
62 content = JavaScriptCompressor.Compress(content);
63 }
64 else if (type.Equals("css"))
65 {
66 content = CssCompressor.Compress(content);
67 }
68 }
69
70 //输入到客户端还可以进行Gzip压缩 ,这里就省略了
71
72 cacheItem = new CompressCacheItem() { Type = type, Content = content, Expires = DateTime.Now.AddDays() };
73 HttpRuntime.Cache.Insert(cachekey, cacheItem, null, cacheItem.Expires, TimeSpan.Zero);
74 }
75
76 string ifModifiedSince = request.Headers["If-Modified-Since"];
77 if (!string.IsNullOrEmpty(ifModifiedSince)
78 && TimeSpan.FromTicks(cacheItem.Expires.Ticks - DateTime.Parse(ifModifiedSince).Ticks).Seconds < )
79 {
80 response.StatusCode = (int)System.Net.HttpStatusCode.NotModified;
81 response.StatusDescription = "Not Modified";
82 }
83 else
84 {
85 response.Write(cacheItem.Content);
86 SetClientCaching(response, cacheItem.Expires);
87 }
88 }
89
90 }
91
92 private void SetClientCaching(HttpResponse response, DateTime expires)
93 {
94 response.Cache.SetETag(DateTime.Now.Ticks.ToString());
95 response.Cache.SetLastModified(DateTime.Now);
96
97 //public 以指定响应能由客户端和共享(代理)缓存进行缓存。
98 response.Cache.SetCacheability(HttpCacheability.Public);
99
//是允许文档在被视为陈旧之前存在的最长绝对时间。
response.Cache.SetMaxAge(TimeSpan.FromTicks(expires.Ticks));
response.Cache.SetSlidingExpiration(true);
}
private class CompressCacheItem
{
/// <summary>
/// 类型 js 或 css
/// </summary>
public string Type { get; set; } // js css
/// <summary>
/// 内容
/// </summary>
public string Content { set; get; }
/// <summary>
/// 过期时间
/// </summary>
public DateTime Expires { set; get; }
}
} http://www.cnblogs.com/benwu/archive/2012/11/09/2762857.html
Asp.net 程序优化js,css合并与压缩的更多相关文章
- Google Pagespeed,自动压缩优化JS/CSS/Image
Google Pagespeed,自动压缩优化JS/CSS/Image 浏览: 发布日期:// 分类:技术分享 关键字: Nginx Appache Pagespeed 自动压缩优化JS/CSS/Im ...
- js文件合并,压缩,缓存,延迟加载
做web前段也有一段时间了,对于web中js文件的加载有些体会想跟大家一起分享一下. 1.首先说说js文件的合并和压缩吧 为了便于集中式管理js的合并和压缩我们创建一个Js.ashx文件来专门处理合并 ...
- Gulp学习指南之CSS合并、压缩与MD5命名及路径替换(转载)
本文转载自: Gulp学习指南之CSS合并.压缩与MD5命名及路径替换
- requireJS中如何用r.js对js进行合并和压缩css文件
我运行的环境是windows+node.js,首先是用npm安装requirejs(全局安装,即使用 'npm install requirejs -g',这样方便在各个目录调用),接着就是下载r.j ...
- [Asp.net Mvc]为js,css静态文件添加版本号
方式一: 思路 string version = ViewBag.Version; @Scripts.RenderFormat("<script type=\"text/ja ...
- 网站优化JS css压缩
在nginx 中开启gzip压缩后,可以大大减少资js css 体积,原来200KB,压缩后只有66KB server{ gzip on; gzip_types text/plain applicat ...
- gulp入坑系列(2)——初试JS代码合并与压缩
在上一篇里成功安装了gulp到项目中,现在来测试一下gulp的合并与压缩功能 gulp入坑系列(1)--安装gulp(传送门):http://www.cnblogs.com/YuuyaRin/p/61 ...
- gulp学习指南之CSS合并、压缩与MD5命名及路径替换
1.引入插件 var gulp = require('gulp'), // uglify = require('gulp-uglify'), concat = require('gulp-concat ...
- ASP.NET下使用Combres对JS、CSS合并和压缩
记录一下,如何简单快捷压缩js和css,通过合并来减少请求次数. 用到的网址: http://www.nuget.org/packages/combres/ https://github.com/bu ...
随机推荐
- 【Android】11.2 通过重写对应的方法保存和恢复实例的状态
分类:C#.Android.VS2015: 创建日期:2016-02-21 一.简介 通过重写(也叫回调)对应的方法来管理Activity的生命周期,比如用户旋转屏幕时应用程序要能自动保存和恢复实例的 ...
- leetcode第一刷_Jump Game II
要求最小的步数,是不是非常easy想到用dp啊? 我一開始的做法是,当找到了一个可以从它延伸到更远的位置,就把这个位置和最远位置的步数都更新一下,结果超时了. 事实上这样不仅是超时的,并且是错误的.由 ...
- netty深入学习之中的一个: 入门篇
netty深入学习之中的一个: 入门篇 本文代码下载: http://download.csdn.net/detail/cheungmine/8497549 1)Netty是什么 Netty是Java ...
- css3导航hover悬停效果
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta http ...
- angular -- $routeParams API翻译
原api出处: https://docs.angularjs.org/api/ngRoute/service/$routeParams $routeParams 可以获取当前路径参数. 需要ngrou ...
- Oracle PLSQL Demo - 13.游标的各种属性[Found NotFound ISOpen RowCount CURSOR]
declare r_emp scott.emp%rowtype; cursor cur_emp is select t.* from scott.emp t; begin open cur_emp; ...
- VC2010下Qt5的中文乱码问题
要搞清楚这个问题,先要弄明白编码.但是编码问题实在太复杂,这里肯定讲不开. 我先找一个例子,比如:“中文” 的 Unicode 码点/UTF8编码/GBK 分别是多少. 先去这个网站,输入 “中文” ...
- ELK的索引的坑——Kibana的图形化(Tile Map)
如果想通过ELK展示地图, 需要将索引名称修改为:logstash*的格式 否则location字段不会修改成geo_point的形式. 详情参考:http://blog.csdn.net/yangg ...
- 关于一个页面的tab切换整体页面刷新而tab标签处是同一个文件怎么做焦点的问题
解决方法,不能直接写点击效果就要在超链接中加一个参数,根据参数的值去给变焦点的效果,实现方法如下: <div class="vip_search"> ...
- c++之——重载、重写、重定义
函数重载: 必须在同一个类中进行: 子类无法重载父类的函数,父类同名函数将被子类名称覆盖: 重载是在编译期间根据参数类型和个数决定函数的调用(静态联编). 函数重写与重定义: 重写: 必须发生在基类和 ...