рдХреБрдЫ рджрд┐рдиреЛрдВ рдкрд╣рд▓реЗ, рдореЗрд░реЗ рджреЛрд╕реНрдд рдиреЗ рджреЗрдЦрд╛ рдХрд┐ рдЙрд╕рдХреА рдмрдбрд╝реА JSON рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рдПрдБ (0.5-1 рдореЗрдЧрд╛рдмрд╛рдЗрдЯ рдХреЗ рдХреНрд░рдо рдореЗрдВ) рдкреИрдХ рдирд╣реАрдВ рдХреА рдЧрдИ рдереАрдВред Windows 2008 R2 + IIS 7.5 + ASP.NET MVC 4 рдХрд╛ рдХрд╛рд░реНрдп рдЧреБрдЪреНрдЫрд╛ред рд╕рдорд╕реНрдпрд╛ рдХреА рдкрд╣рдЪрд╛рди рдХреА рдЧрдИ рд╣реИ, рдПрдХ рд╕рдорд╛рдзрд╛рди рдХреА рдЦреЛрдЬ рд╢реБрд░реВ рд╣реЛ рдЧрдИ рд╣реИред рд╣рдорд╛рд░реЗ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдкреБрди: рдкреЗрд╢ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдореИрдВрдиреЗ рд▓реЗрдЦ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрд▓рдЧ рдЖрд╡реЗрджрди рд▓рд┐рдЦрд╛ред
рдХреНрд░рд┐рдпрд╛ рд╡рд┐рдзрд┐
public ActionResult Index() { if (Request.IsAjaxRequest()) { return Json(new {}, JsonRequestBehavior.AllowGet); } return View(); }
рд╡рд┐рдЪрд╛рд░
<script src="http://ajax.aspnetcdn.com/ajax/jquery/jquery-1.9.0.js"></script> <script type="text/javascript"> jQuery(function ($) { $.ajax({ url: '@Url.Action("Index")' }); }) </script>
рд╕рдмрд╕реЗ рдкрд╣рд▓реА рдЪреАрдЬ рдЬреЛ рдЪреЗрдХ рдХреА рдЧрдИ рдереА рд╡рд╣ рдереА HTTP рд╣реЗрдбрд░ред

рд╕реНрдХреНрд░реАрдирд╢реЙрдЯ рд╕реЗ рдкрддрд╛ рдЪрд▓рддрд╛ рд╣реИ рдХрд┐ рдЕрдЬрд╛рдХреНрд╕ рдЕрдиреБрд░реЛрдз
X-Requested-With: XMLHttpRequest
рдФрд░ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рд░рд┐рдкреЛрд░реНрдЯ рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдпрд╣ gzip рдХреЛ рд╕рдордЭрддрд╛ рд╣реИ рдпрд╛
Accept-Encoding: gzip, deflate
рд╕рд╛рде рдбрд┐рдлреНрд▓реЗрдЯ рдХрд░рддрд╛ рд╣реИ
Accept-Encoding: gzip, deflate
рд╣реЗрдбрд░, рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП рд╕рд░реНрд╡рд░ json рдХреЗ рд╕рд╛рде рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХрд░рддрд╛ рд╣реИ
Content-Type: application/json
Application
Content-Type: application/json
, but рдХреЛрдИ рд╕рдВрдкреАрдбрд╝рди рдирд╣реАрдВ рдХреНрдпреЛрдВрдХрд┐
Content-Encoding
рд╣реЗрдбрд░ рдЧрд╛рдпрдм рд╣реИред
рдЕрдЧрд▓рд╛ рд╕реНрдерд╛рдкрд┐рдд рд╡реЗрдм рд╕рд░реНрд╡рд░ рдореЙрдбреНрдпреВрд▓ рдХреЗ рд▓рд┐рдП рдПрдХ рдЬрд╛рдВрдЪ рдЧрдпрд╛ред рдкреНрд░рд╢рд╛рд╕рдирд┐рдХ рдЙрдкрдХрд░рдг -> рд╕рд░реНрд╡рд░ рдкреНрд░рдмрдВрдзрдХ -> рднреВрдорд┐рдХрд╛ -> рдЖрдИрдЖрдИрдПрд╕

рд╕реНрдЯреИрдЯрд┐рдХ / рдбрд╛рдпрдирд╛рдорд┐рдХ рдХрдВрдЯреЗрдВрдЯ рдХрдореНрдкреНрд░реЗрд╕рди рд╕реНрдерд╛рдкрд┐рддред (рдореИрдВ рдзреНрдпрд╛рди рджреЗрдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ, рд╡рд┐рдВрдбреЛрдЬ 7 рдХреЗ рд▓рд┐рдП рдЗрдВрд╕реНрдЯреЙрд▓реЗрд╢рди рдШрдЯрдХреЛрдВ рдХреЛ рдЬреЛрдбрд╝рдиреЗ / рд╣рдЯрд╛рдиреЗ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ)ред
рдЕрдЧрд▓рд╛, рдЬрд╛рдВрдЪреЗрдВ рдХрд┐ IIS рдкрд░ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рд▓рд┐рдП рд╕рдВрдкреАрдбрд╝рди рд╕рдХреНрд╖рдо рд╣реИ рдпрд╛ рдирд╣реАрдВред


рдпрджрд┐ рдирд╣реАрдВ, рддреЛ рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЛ рдЬрд╛рдВрдЪреЗрдВ рдФрд░ рд▓рд╛рдЧреВ рдХрд░реЗрдВред
web.config
рдорд╛рдзреНрдпрдо рд╕реЗ рднреА рд╕рдВрдкреАрдбрд╝рди рд╕рдВрднрд╡ рд╣реИ
web.config
<system.webServer> <urlCompression doStaticCompression="true" doDynamicCompression="true" /> </system.webServer>
рдпрд╛ рддреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рд╕рдВрдкрд╛рджрдХ -> system.webServer -> urlCompression



рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╕рдм рдХреБрдЫ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдХреНрд░рдо рдореЗрдВ рд╣реИ, рд▓реЗрдХрд┐рди IIS рдЬреИрд╕рд╛ рдХрд┐ рдЙрд╕рдиреЗ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рд╢реАрд░реНрд╖рдХ рдореЗрдВ
Content-Encoding
рдирд╣реАрдВ рджрд┐рдпрд╛, рдпрд╣ рдЕрднреА рднреА рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред
рд╣рд┐рд▓рдиреЗ рд▓рдЧрд╛
<system.webServer> <httpCompression> <dynamicTypes> <add mimeType="application/json" enabled="true" /> <add mimeType="application/json; charset=utf-8" enabled="true" /> </dynamicTypes> </httpCompression> </system.webServer>
рдФрд░, рдЬрдпрдХрд╛рд░, рдЬреАрдд, рд╣рдо рд▓рдВрдмреЗ рд╕рдордп рд╕реЗ рдкреНрд░рддреАрдХреНрд╖рд┐рдд
Content-Encoding: gzip
ред рд▓реЗрдХрд┐рди рдПрдХ рдмрд╣реБрдд рдмрдбрд╝реА BUT рд╣реИред
httpCompression
рд╕реЗрдХреНрд╢рди рдХреЛ рдХреЗрд╡рд▓
applicationhost.config
рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕рдХрд╛ рдорддрд▓рдм рдпрд╣ рд╣реИ рдХрд┐ рдпрд╛ рддреЛ рдЖрдк рдПрдХ IIS рд╡реНрдпрд╡рд╕реНрдерд╛рдкрдХ рд╣реИрдВ, рдпрд╛ рдпрд╣ рд╡рд┐рдХрд▓реНрдк рдЖрдкрдХреЛ рд╕реВрдЯ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ (рдЬрдм рддрдХ рдХрд┐, рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ, рдЖрдк рдЕрдкрдиреЗ рд╡рд┐рдкрд░реАрдд рдХреЗ рд╣реЙрд╕реНрдЯрд▓ рдХреЛ рдордирд╛ рд▓реЗрддреЗ рд╣реИрдВ)ред
рдорд╛рди рд▓реАрдЬрд┐рдП рдХрд┐ рдкрд╛рдпрд╛ рдЧрдпрд╛ рд╡рд┐рдХрд▓реНрдк рдЖрдкрдХреЛ рд╕реВрдЯ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЖрдкрдХреЛ рдЕрднреА рднреА рдЙрддреНрддрд░ рдХреЛ рд╕рдВрдХреНрд╖рд┐рдкреНрдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдЧрддрд┐рд╢реАрд▓ рд╕рдВрдкреАрдбрд╝рди рдХреА рд╕реЗрдЯрд┐рдВрдЧ рдореЗрдВ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдХреНрдпрд╛ рд╣реИред

рд╕рдВрдкреАрдбрд╝рди рд▓рд╛рдЧреВ рд╣реЛрдЧрд╛, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП,
text/javascript
ред рдмреЗрд╢рдХ, рдпрд╣ рд╣реИрдХ рдХреА рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдХреБрдЫ рднреА рдирд╣реАрдВ рд╕реЗ рдмреЗрд╣рддрд░ рд╣реИред
рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣рдорд╛рд░реА рдХреНрд░рд┐рдпрд╛ рд╡рд┐рдзрд┐ рдмрджрд▓реЗрдВ
public ActionResult Index() { if (Request.IsAjaxRequest()) { return new JsonResult() { ContentType = "text/javascript", ContentEncoding = Encoding.UTF8, JsonRequestBehavior = JsonRequestBehavior.AllowGet, Data = new {} }; } return View(); }
рдФрд░ рдЬрдм
$.ajax
рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП рдЙрддреНрддрд░ рджреЗрддреЗ рд╣реИрдВ, рддреЛ рд╣рдореЗрдВ рддреБрд░рдВрдд рдбреЗрдЯрд╛ рдкрд╛рд░реНрд╕рд┐рдВрдЧ рддреНрд░реБрдЯрд┐ рдорд┐рд▓рддреА рд╣реИред рджреВрд╕рд░реЗ рд╢рдмреНрджреЛрдВ рдореЗрдВ, рдЕрдм рд╣рдореЗрдВ рдпрд╛ рддреЛ
$.getJSON
рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдпрд╛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдЗрдВрдЧрд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рд╣рдо
json
рдЕрдкреЗрдХреНрд╖рд╛ рдХрд░ рд░рд╣реЗ рд╣реИрдВред
рд╡рд┐рдЪрд╛рд░
<script src="http://ajax.aspnetcdn.com/ajax/jquery/jquery-1.9.0.js"></script> <script type="text/javascript"> jQuery(function ($) { $.ajax({ url: '@Url.Action("Index")', dataType: 'json', }); }) </script>
рдФрд░ рддреАрд╕рд░рд╛ рд╕рдорд╛рдзрд╛рди рдЬреЛ рджрд┐рдЦрд╛рдИ рджрд┐рдпрд╛, рд▓реЗрдХрд┐рди рдЙрди рдХрд╛рд░реНрдпреЛрдВ рдореЗрдВ рдлрд┐рдЯ рдирд╣реАрдВ рд╣реБрдЖ (рдЗрд╕рдХрд╛ рдорддрд▓рдм рдпрд╣ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдпрд╣ рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп рдирд╣реАрдВ рд╣реИ) рдЕрдкрдиреЗ рдЖрдк рд╕реЗ рдкреИрдХ рдХрд░рдирд╛ рд╣реИред
рдореИрдВ
рд╕реНрдЯреИрдХ рд╕реЗ рдПрдХ рдЙрджрд╛рд╣рд░рдг рджреЗрддрд╛ рд╣реВрдВ, рдЬрд┐рд╕рдХреЗ рд╕рд╛рде рдореИрдВ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕рд╣рдордд рд╣реВрдВ
public class CompressAttribute : ActionFilterAttribute { public override void OnActionExecuting(ActionExecutingContext filterContext) { var encodingsAccepted = filterContext.HttpContext.Request.Headers["Accept-Encoding"]; if (string.IsNullOrEmpty(encodingsAccepted)) return; encodingsAccepted = encodingsAccepted.ToLowerInvariant(); var response = filterContext.HttpContext.Response; if (encodingsAccepted.Contains("deflate")) { response.AppendHeader("Content-encoding", "deflate"); response.Filter = new DeflateStream(response.Filter, CompressionMode.Compress); } else if (encodingsAccepted.Contains("gzip")) { response.AppendHeader("Content-encoding", "gzip"); response.Filter = new GZipStream(response.Filter, CompressionMode.Compress); } } }
рдбреЗрдЯрд╛ рд╕рдВрдкреАрдбрд╝рди рдЕрдиреБрдкрд╛рдд
рдЙрдкрд░реЛрдХреНрдд рдХреЗ рд╕рд╛рде рдЦреЗрд▓рддреЗ рд╕рдордп, рдПрдХ рдФрд░ рджрд┐рд▓рдЪрд╕реНрдк рдмрд╛рдд рджреЗрдЦреА рдЧрдИ, рдлрд╝рд┐рдбрд▓рд░ рдореЗрдВ рд╕рдВрдкреАрдбрд╝рд┐рдд рд╕рд╛рдордЧреНрд░реА рдХреЛ рдЕрдирдкреИрдХ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ рдФрд░ рдлрд┐рд░ рд╕реЗ рдлрд╝реАрдб рджреНрд╡рд╛рд░рд╛ рд╣реА рд╡рд╛рдкрд╕ рдХрд░ рджрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдЖрдВрдЦ рджреНрд╡рд╛рд░рд╛ рдлреАрдбрд░ рдкрд░ рд╕рдВрдкреАрдбрд╝рди ~ 10-20% рдХрдо рдмрд╛рдЗрдЯреНрд╕ рдерд╛ред IIS рдХреЗ рд▓рд┐рдП рд╕рдВрдкреАрдбрд╝рди рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдХреИрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ, рдореИрдВ рдХрд▓реНрдкрдирд╛ рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ред рддреАрд╕рд░реЗ рд╡рд┐рдХрд▓реНрдк рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЬрд┐рд╕рдореЗрдВ рдЖрдк
CompressionLevel
constructors рдкреИрд░рд╛рдореАрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рд╢рд╛рдпрдж рдЖрдк рдореЗрдВ рд╕реЗ рдХреЛрдИ рдмрддрд╛рдПрдЧрд╛? рдореИрдВ рдЗрд╕ рдмрд┐рдВрджреБ рдХреЛ рдЕрдкрдиреЗ рд▓рд┐рдП рдорд╣рддреНрд╡рдкреВрд░реНрдг рдорд╛рдирддрд╛ рд╣реВрдВ, рдХреНрдпреЛрдВрдХрд┐ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рдЖрдзрд╛рд░ рдкрд░, рд╕рдВрдЪрд░рд┐рдд рдпрд╛рддрд╛рдпрд╛рдд рдХреА рдорд╛рддреНрд░рд╛ рдХрднреА-рдХрднреА рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реЛрддреА рд╣реИ, рдФрд░ рдХрднреА-рдХрднреА, рдЗрд╕рдХреЗ рд╡рд┐рдкрд░реАрдд, рдкреНрд░реЛрд╕реЗрд╕рд░ рд╕рдордпред
рдореБрдЭреЗ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдФрд░ рдЕрдзрд┐рдХ рд╡рд┐рдХрд▓реНрдк рд╕реБрдирдиреЗ рдореЗрдВ рдЦреБрд╢реА рд╣реЛрдЧреА, рдЪрд╛рд╣реЗ рдкрд╣рд▓реА рдирдЬрд╝рд░ рдореЗрдВ рд╡рд┐рдЪрд╛рд░ рдХрд┐рддрдирд╛ рднреА рдкрд╛рдЧрд▓ рдХреНрдпреЛрдВ рди рд╣реЛред