asp.net mvc浏览器缓存和压缩的实现
2010-02-23 09:55
417 查看
cache在开发高可扩展性的web应用中起着至关重要的作用,我们可以按照预定的时间将任何get请求缓存到浏览器中,如果在预定的时间内用户请求同一URL那么response就会通过浏览器的cache来实现而非server。可以通过下面的action filter在ASP.NET MVC应用中实现同样的功能:
using System;
using System.Web;
using System.Web.Mvc;
public class CacheFilterAttribute: ActionFilterAttribute
{
/// <summary>
/// Get or sets the cache duration in seconds . the default is 10 seconds
/// </summary>
/// <value> the cache duration in seconds </value>
public int Duration
{
get;
set;
}
public CacheFilterAttribute()
{
Duration = 10;
}
public override void OnActionExecuted(FiterExecutedContext filterContext)
{
if (Duration <= 0) return;
HttpCachePolicy cache = fiterContext.HttpContext.Response.Cache;
TimeSpan cacheDuration = TimeSpan.FromSeconds(Duration);
cache.SetCacheability(Httpcacheablity.public);
cache.SetExpires(DateTime.Now.Add(cacheDuration);
cache.SetMaxAge(cacheDuration);
cache.AppendCacheExtension("must revalidate, proxy-revalidate");
}
}
可以在controller action method中应用这个filter:
[CacheFilter(Duration = 60)]
public void Category(string name, int? page)
{
}
提升web 应用性能的另外一个重要因素便是压缩,目前大多数的浏览器都接受压缩过的内容,这样就大大节省了带宽。可以通过下面的filter在ASP.NET WEB应用中压缩你的response:
using System.Web;
using System.Web.Mvc;
public class CompressFilter : ActionFilterAttribute
{
public override OnActionExecuting(FilterExecutingContext filterContext)
{
HttpRequestBase request = filterContext.HttpContext.Request;
string acceptEncoding = request.Headers("Accept-Encoding");
if (string.IsNullOrEmpty(acceptEncoding)) return;
acceptEncoding = acceptEncoding.ToUpperInvariant();
HttpResponseBase response = filterContext.HttpContext.Response;
if (acceptEncoding.Contains("GZIP"))
{
reponse.AppendHeader("Content-encoding","gzip");
response.Filter = new GZipStream(response.Filter,CompressionMode.Compress);
}
}
}
可以在Controller action method中应用这个filter:
[CompressFilter]
public void Category(string name, int? page)
{
}
当然也可以两个filter一块儿使用:
[CompressFilter]
[CacheFilter(Duration = 60,Order = 2)]
public void Category(string name, int? page)
{
}
using System;
using System.Web;
using System.Web.Mvc;
public class CacheFilterAttribute: ActionFilterAttribute
{
/// <summary>
/// Get or sets the cache duration in seconds . the default is 10 seconds
/// </summary>
/// <value> the cache duration in seconds </value>
public int Duration
{
get;
set;
}
public CacheFilterAttribute()
{
Duration = 10;
}
public override void OnActionExecuted(FiterExecutedContext filterContext)
{
if (Duration <= 0) return;
HttpCachePolicy cache = fiterContext.HttpContext.Response.Cache;
TimeSpan cacheDuration = TimeSpan.FromSeconds(Duration);
cache.SetCacheability(Httpcacheablity.public);
cache.SetExpires(DateTime.Now.Add(cacheDuration);
cache.SetMaxAge(cacheDuration);
cache.AppendCacheExtension("must revalidate, proxy-revalidate");
}
}
可以在controller action method中应用这个filter:
[CacheFilter(Duration = 60)]
public void Category(string name, int? page)
{
}
提升web 应用性能的另外一个重要因素便是压缩,目前大多数的浏览器都接受压缩过的内容,这样就大大节省了带宽。可以通过下面的filter在ASP.NET WEB应用中压缩你的response:
using System.Web;
using System.Web.Mvc;
public class CompressFilter : ActionFilterAttribute
{
public override OnActionExecuting(FilterExecutingContext filterContext)
{
HttpRequestBase request = filterContext.HttpContext.Request;
string acceptEncoding = request.Headers("Accept-Encoding");
if (string.IsNullOrEmpty(acceptEncoding)) return;
acceptEncoding = acceptEncoding.ToUpperInvariant();
HttpResponseBase response = filterContext.HttpContext.Response;
if (acceptEncoding.Contains("GZIP"))
{
reponse.AppendHeader("Content-encoding","gzip");
response.Filter = new GZipStream(response.Filter,CompressionMode.Compress);
}
}
}
可以在Controller action method中应用这个filter:
[CompressFilter]
public void Category(string name, int? page)
{
}
当然也可以两个filter一块儿使用:
[CompressFilter]
[CacheFilter(Duration = 60,Order = 2)]
public void Category(string name, int? page)
{
}
相关文章推荐
- ASP.NET MVC 实现与SQLSERVER的依赖缓存
- ASP.NET MVC中使用jQuery时的浏览器缓存问题详解
- ASP.NET MVC 2/3 中实现filter判断浏览器
- 大叔手记(20):ASP.NET MVC中使用jQuery时的浏览器缓存问题
- 一个窗口里包含一个iframe,点击iframe内的submit按钮,返回的视图总是显示在iframe中,我想要的效果是点击按钮后返回的视图是在浏览器窗口中...?asp.net mvc 的action中,不用js怎么实现??????????
- ASP.NET MVC 如何实现头压缩
- 勤于思考: ASP.NET MVC 注销后 使用浏览器 【后退】 不使用缓存页面
- ASP.NET MVC Action Filter - 缓存与压缩
- Web开发中的缓存技术之三:通过ETag实现缓存处理(ASP.NET MVC版)
- ASP.NET MVC用Bundles压缩js文件,并让浏览器异步加载js
- ASP.NET MVC中使用OutputCache实现服务器端页面级缓存注意问题
- ASP.NET MVC中使用jQuery时的浏览器缓存问题详解
- ASP.NET MVC 数据库依赖缓存的实现
- ASP.NET Boilerplate 学习 AspNet Core2 浏览器缓存使用 c#基础,单线程,跨线程访问和线程带参数 wpf 禁用启用webbroswer右键菜单 EF Core 2.0使用MsSql/MySql实现DB First和Code First ASP.NET Core部署到Windows IIS QRCode.js:使用 JavaScript 生成
- ASP.NET MVC中使用jQuery时的浏览器缓存问题
- ASP.NET MVC中使用jQuery时的浏览器缓存问题
- 实现asp.net mvc页面二级缓存,提高访问性能
- ASP.NET MVC中使用jQuery时的浏览器缓存问题
- YbSoftwareFactory 代码生成插件【十】:ASP.NET WebApi MVC下审计、缓存和导出功能的实现
- ASP.NET MVC用IHttpModule修改response的html实现压缩或者转繁体,IHttpModule用后台代码注册