生活随笔
收集整理的這篇文章主要介紹了
谈mvc开发中gzip压缩的应用
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
壓縮view的內容,可加過濾器
?
public class GzipFilter : ActionFilterAttribute{public override void OnResultExecuting(ResultExecutingContext filterContext){string acceptEncoding = filterContext.HttpContext.Request.Headers[
"Accept-Encoding"];if (String.IsNullOrEmpty(acceptEncoding))
return;var response =
filterContext.HttpContext.Response;acceptEncoding =
acceptEncoding.ToUpperInvariant();if (acceptEncoding.Contains(
"GZIP")){response.AppendHeader("Content-Encoding",
"gzip");response.Filter =
new GZipStream(response.Filter, CompressionMode.Compress);}else if (acceptEncoding.Contains(
"DEFLATE")){response.AppendHeader("Content-Encoding",
"deflate");response.Filter =
new DeflateStream(response.Filter, CompressionMode.Compress);}}} 然后在要壓縮的頁面控制器上加標簽。
?
[GzipFilter]public ActionResult Index()
?
現在基本上所有的瀏覽器支持gzip, deflate.
這里是編程對css和js文件進行壓縮放在本地,然后發送給客戶端。
----這種方法在iis7.5的集成模式下有效,在vs中有效,但在iis6里我還沒配置好,無效
----關鍵是請求,只對action有效,像js,css文件的請求,在BeginRequest里檢測不到。這種方法運行在iis7里很完美,文件大概會被壓縮到原來的1/3到1/4.
此方法主要是給請求的文件加上http頭//Response.AppendHeader("Content-Encoding", "gzip"); 這里很難處理。
如果有誰找到iis6里面可以運行的方法麻煩告訴我,或許能一起討論找到更好的解決方案,非常感謝!
---pukuimin@qq.com
瀏覽器檢測到這個頭,就會對文件進行解壓縮,就正常運行了。
protected void Application_BeginRequest(
object sender, EventArgs e){GzipFiles();}private void GzipFiles(){string acceptEncoding = Request.Headers[
"Accept-Encoding"];string filepath =
Request.FilePath;string mapfilepath = Server.MapPath(
"~" +
filepath);if (acceptEncoding.Contains(
"gzip")){#region Gzip處理
if (filepath.EndsWith(
".css"))
//css文件處理
{Response.AppendHeader("Content-Type",
"text/css");Request.ContentType =
"text/css";if (filepath.EndsWith(
"gzip.css")){FileInfo fi =
new FileInfo(mapfilepath);Response.AppendHeader("Content-Encoding",
"gzip");int len = mapfilepath.Length -
"gzip.css".Length;if (fi.Exists ==
false) GZip(mapfilepath.Substring(
0, len), mapfilepath);}}else if (filepath.EndsWith(
".js"))
//js文件處理
{Response.AppendHeader("Content-Type",
"application/x-javascript");Request.ContentType =
"application/x-javascript";if (filepath.EndsWith(
"gzip.js")){FileInfo fi =
new FileInfo(mapfilepath);Response.AppendHeader("Content-Encoding",
"gzip");int len = mapfilepath.Length -
"gzip.js".Length;if (fi.Exists ==
false) GZip(mapfilepath.Substring(
0, len), mapfilepath);}}#endregion}else if (acceptEncoding.Contains(
"deflate")){#region deflate處理
if (filepath.EndsWith(
".css"))
//css文件處理
{Response.AppendHeader("Content-Type",
"text/css");Request.ContentType =
"text/css";if (filepath.EndsWith(
"deflate.css")){FileInfo fi =
new FileInfo(mapfilepath);Response.AppendHeader("Content-Encoding",
"gzip");int len = mapfilepath.Length -
"deflate.css".Length;if (fi.Exists ==
false) GZip(mapfilepath.Substring(
0, len), mapfilepath);}}else if (filepath.EndsWith(
".js"))
//js文件處理
{Response.AppendHeader("Content-Type",
"application/x-javascript");Request.ContentType =
"application/x-javascript";if (filepath.EndsWith(
"deflate.js")){FileInfo fi =
new FileInfo(mapfilepath);Response.AppendHeader("Content-Encoding",
"gzip");int len = mapfilepath.Length -
"deflate.js".Length;if (fi.Exists ==
false) GZip(mapfilepath.Substring(
0, len), mapfilepath);}}#endregion}}public void GZip(
string fileName,
string gipFileName){FileStream fr =
File.Create(gipFileName);FileStream fc =
File.OpenRead(fileName);GZipStream gzs =
new GZipStream(fr, CompressionMode.Compress);
//壓縮文件類byte[] arr =
new byte[fc.Length];fc.Read(arr, 0, (
int)fc.Length);gzs.Write(arr, 0, (
int)fc.Length);gzs.Close();fc.Close();fr.Close();}//解壓縮文件方法public void DeZGip(
string fileName,
string gipFileName){//準備輸入輸出文件FileStream fc =
File.Create(fileName);FileStream fr =
File.OpenRead(gipFileName);GZipStream gzs =
new GZipStream(fr, CompressionMode.Decompress);byte[] arr =
new byte[fr.Length];fr.Read(arr, 0, (
int)fr.Length);fc.Write(arr, 0, (
int)fr.Length);gzs.Close();fr.Close();fc.Close();} ?
總結
以上是生活随笔為你收集整理的谈mvc开发中gzip压缩的应用的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。