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