بهبود عملکرد اپلیکیشن های MVC با استفاده از فشرده سازی HTTP

جمعه 27 فروردین 1395

نزدیک شدن به HTTP به شما اجازه می دهد که از مزیت های این پروتکل استفاده کنید. به این معنی که می توانیم کاملا از ویژگی های HTTP مانند caching، etags، کدهای وضعیت(status codes) و مانند این استفاده کنیم. یکی از ویژگی های مهم HTTP این است که به طور پیش فرض از Compression یا فشرده سازی پشتیبانی می کند. در این مقاله می خواهیم فشرده سازی HTTP یا HTTP Compression روی صفحات MVC را با استفاده از کد سمت سرور یا IIS انجام دهیم.

بهبود عملکرد اپلیکیشن های MVC با استفاده از فشرده سازی HTTP

فشرده سازی یک روش ساده و موثر برای صرفه جویی در پهنای باند است و به سایت شما سرعت می بخشد. یکی از مزیت های اصلی استفاده از پروتکل 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 کلیک کنید.

فایل های ضمیمه

برنامه نویسان

نویسنده 3355 مقاله در برنامه نویسان

کاربرانی که از نویسنده این مقاله تشکر کرده اند

در صورتی که در رابطه با این مقاله سوالی دارید، در تاپیک های انجمن مطرح کنید