Nous avons un code assez commun qui a bien fonctionné:filtres Flushing et la compression (ASP.NET MVC)
public class CompressionFilterAttribute : ActionFilterAttribute
{
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
HttpRequestBase request = filterContext.HttpContext.Request;
if (request.IsAjaxRequest())
return;
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 WhitespaceFilter(new GZipStream(response.Filter, CompressionMode.Compress));
}
else if (acceptEncoding.Contains("DEFLATE"))
{
response.AppendHeader("Content-encoding", "deflate");
response.Filter = new WhitespaceFilter(new DeflateStream(response.Filter, CompressionMode.Compress));
}
}
}
Maintenant, je suis en train d'utiliser Response.Flush()
pour livrer une partie de la page, pour améliorer l'expérience utilisateur. Avec ce scénario, lorsque response.Filter
est modifié par chaque opération d'écriture, il est clair que la page doit être remise à la fois. Comment puis-je rendre mon application pour écrire dans un flux intermédiaire, puis le compresser, puis appuyer sur Response.Filter
?
trendy, a fait le blog phpied poste vous inspire? :) –
Non, juste "besoin de vitesse" ... Je veux dire la vitesse de réponse de l'application – st78