У меня есть вид приложения MVC, который генерирует довольно большую таблицу таблиц HTML ( > 20 МБ).
Я сжимаю представление в контроллере с помощью фильтра сжатия
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);
}
}
}
Есть ли способ исключить (достаточно большое) количество избыточных пробелов, сгенерированных в представлении, прежде чем запускать фильтр сжатия (чтобы уменьшить рабочую нагрузку и размер сжатия)?
РЕДАКТИРОВАТЬ: Я получил его работу с использованием метода WhiteSpaceFilter, предложенного Womp ниже.
Здесь интересны результаты, проанализированные Firebug:
1) Без сжатия, без пробела - 21 МБ, 2,59 минуты
2) С сжатием GZIP нет полосы пропускания - 2 МБ, 17,59 с
3) При сжатии GZIP полоса пропускания - 558 кБ, 12,77 с
Так что, конечно, стоит того.