我有一个MVC应用程序视图,生成相当大的HTML值表(> 20MB).
我正在使用压缩过滤器压缩控制器中的视图
internal class CompressFilter : ActionFilterAttribute
{
public override void OnActionExecuting(ActionExecutingContext 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"))
{
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);
}
}
}
Run Code Online (Sandbox Code Playgroud)
有没有办法在运行压缩过滤器之前消除视图中生成的(非常大)冗余空白量(以减少压缩工作量和大小)?
编辑: 我使用下面的Womp建议的WhiteSpaceFilter技术.
感兴趣的是Firebug分析的结果:
1)没有压缩,没有空白条 - 21MB,2.59分钟
2)使用GZIP压缩,没有空白条 - 2MB,17.59s
3)使用GZIP压缩,空白条--558kB,12.77s
所以当然值得.
如何从ASP.NET MVC 3输出中删除所有空格?
更新:我知道如何使用string.Replace方法或正则表达式从字符串中删除空格; 但我不知道,如何在ASP.NET MVC 3中使用主题从输出字符串中删除所有空格.例如,当调用"OnResultExecuted"方法,并且结果准备好发送给最终用户的浏览器时,我想获取结果 - 作为String或Stream对象; 他们之间没有区别 - 并且完成我的工作.谢谢大家.:)