بهبود عملکرد اپلیکیشن های MVC با استفاده از فشرده سازی HTTP
جمعه 27 فروردین 1395نزدیک شدن به HTTP به شما اجازه می دهد که از مزیت های این پروتکل استفاده کنید. به این معنی که می توانیم کاملا از ویژگی های HTTP مانند caching، etags، کدهای وضعیت(status codes) و مانند این استفاده کنیم. یکی از ویژگی های مهم HTTP این است که به طور پیش فرض از Compression یا فشرده سازی پشتیبانی می کند. در این مقاله می خواهیم فشرده سازی HTTP یا HTTP Compression روی صفحات MVC را با استفاده از کد سمت سرور یا IIS انجام دهیم.
فشرده سازی یک روش ساده و موثر برای صرفه جویی در پهنای باند است و به سایت شما سرعت می بخشد. یکی از مزیت های اصلی استفاده از پروتکل HTTP پشتیبانی از فشرده سازی داده با استفاده از gzip/deflate می باشد که شامل caching و etags است. این مقاله توضیح می دهد که چگونه فشرده سازی HTTP را با استفاده از Fiddler و trust me پیکربندی کنیم. این عمل بسیار ساده انجام می شود.
بررسی رمزنگاری درخواست/پاسخ جاری
در صورتی که شما از localhost به عنوان محیط hosting برای IIS استفاده کنید و درخواست/پاسخ HTTP را در fiddler مشاهده نکنید، پس نیاز است که یک ورودی در فایل web.config برای ایجاد Fiddler به عنوان پراکسی برای هر درخواست HTTP در نظر بگیرید، به صورت زیر:
<system.net> <defaultProxy useDefaultCredentials="true" enabled="true"> <proxy usesystemdefault="False" proxyaddress="http://127.0.0.1:8888" bypassonlocal="False" autoDetect="False" /> </defaultProxy> </system.net>
روش های بکارگیری فشرده سازی داده(Data Compression)
1. استفاده از کد ASP.NET
2. استفاده از IIS
برای پیاده سازی این در ASP.NET MVC می توانیم از ActionFilterAttribute استفاده کرده و یکی از متدهای OnActionExecuting یا OnResultExecuting را بازنویسی کنیم.
کد زیر برای این استفاده می شود که آیا مرورگر درخواست جاری می تواند رمزنگاری GZIP/DEFLATE را با نگاهی بر درخواست Accept-Encoding بپذیرد؟ اگر این رمزنگاری GZIP را در Content-encoding و در هدر پاسخ پیدا کند و اگر DEFLATE را پشتیبانی کند، آنگاه این کد باید deflate را در Content-encoding تنظیم کند:
using System; using System.Collections.Generic; using System.IO.Compression; using System.Linq; using System.Web; using System.Web.Mvc; namespace HTTPCompression.ActionFilters { public class CompressAttribute : ActionFilterAttribute { public override void OnResultExecuting(ResultExecutingContext 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); } } } }
به کار گرفتن صفت filter برای هر action به هر گونه ای که شما بخواهید، می باشد. در اینجا ما آن را برای صفحه درباره ما(About) در اپلیکیشن پیش ساخته MVC به کار گرفته ایم:
[Compress] public ActionResult About() { ViewBag.Message = "Your application description page."; return View(); }
حالا اپلیکیشن را از IIS اجرا کرده و از گزینه About روی مرورگر، برای دسترسی به این صفحه استفاده کنید. به Fiddler رفته و درخواست روی این صفحه را بررسی کنید. شما باید متن فشرده شده و content-Encoding را پیدا کنید:
استفاده از IIS
قبل از فعال سازی data compression در iis باید ماژول Dynamic Compression را از Server Manager Add Role و Feature نصب کنید.
نصب ماژول فشرده سازی داینامیک(Dynamic Compression Module)
در زیر مراحل نصب این ماژول وجود دارد.
1. بر روی start کلیک کرده سپس Administrative Tools و بعد Server Manager را انتخاب کنید.
2. در سمت چپ Roles را باز کرده و سپس بر روی Web Server (IIS) کلیک کنید.
3. اسکرول را به سمت پایین برده تا به بخش Role Services رسیده و بر روی Add Role Services کلیک کنید. سپس ویزارد Role Services باز می شود.
4. روی صفحه Select Role Services، اسکرول را به سمت پایین برده تا به بخش Performance رسیده و Dynamic Content Compression را انتخاب کنید. حالا بر روی Next کلیک کنید.
5. پیغام را خوانده و بر روی Install کلیک کنید.
حالا نصب انجام شده و پنجره ویزارد را ببندید.
فعال سازی Compression
سطوح(Levels)
فرایند پیکربندی HTTP compression می تواند در سطوح زیر در iis انجام شود:
Web Server
Site
Application
دایرکتوری فیزیکی و مجازی
فایل (URL)
مراحل
1. ابتدا IIS Manager را باز کرده و به سطحی که می خواهید آن را مدیریت کنید بروید. برای کسب اطلاعات در مورد opening IIS Manager این لینک را ببینید.
2. در صفحه Features، بر روی Compression دوبار کلیک کنید.
3. روی صفحه Compression تیک قسمت Enable dynamic content compression را بزنید.
4. بر روی Apply در پنل Actions کلیک کنید.
- ASP.net MVC
- 2k بازدید
- 5 تشکر