فشرده سازی صفحات توسط کتابخانه GZip

سه شنبه 10 تیر 1393

این کتابخانه توانایی کاهش دادن زمان، برای انتقال فایل‌های صفحه و استایل شیت‌ها را دارد. این کار در نهایت باعث کاهش زمان بارگذاری صفحه می‌شود.

فشرده سازی صفحات توسط کتابخانه  GZip

وقتی یک کاربر به سایت شما وارد می‌شود، یک تماس با سرور شما بر قرار شده و فایل‌هایی از آن را درخواست می‌کند. هر چه این فایل‌ها  بزرگتر باشند، مدت زمان بیشتری برای مرور شدن آنها و ظاهر شدن در تصویر نیاز است. قابلیت فشرده‌سازی gzip باعث می‌شود فایل‌های CSS و صفحات وب قبل از ارسال به مرورگر فشرده شوند. این کار باعث افزایش قابل توجه سرعت انتقال می‌شود، زیرا  فایل‌ها حجم بسیار کمتری پیدا کرده‌اند. 

از نظر هزینه اثربخشی نیز، این قابلیت می‌تواند از موثرترین عوامل بهینه‌ سازی سرعت  صفحات شما باشد، البته اگر تا به حال دست به کار نشده باشید. 

این قابلیت چطور عمل می کند؟

دلیل اثربخشی بالای gzip در محیط وب این است که فایل های CSS  و HTML  شامل تکست‌های تکراری زیادی شده و فضای زیادی را اشغال می‌کنند. از آنجا که gzip استرینگ‌های مشترک را فشرده می‌کند، این قابلیت می‌تواند باعث کاهش اندازه صفحه و استایل شیت‌ها، تا 70 درصد شود!

چطور gzip را نصب کنیم؟

روش‌های متفاوتی برای تنظیم  قابلیت فشرده‌سازی gzip وجود دارد. در این مقاله به ساده ترین آن اشاره می کنیم.

بعد از ایجاد پروژه خود کلاسی به آن اضافه کنید به نام EnableCompression و داخل آن کد زیر را وارد کنید:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
//Add This---------------------------
using System.IO.Compression;
using System.Web;
using System.Web.Mvc;

namespace Test.Controllers
{
    public class EnableCompressionAttribute : ActionFilterAttribute
    {
        const CompressionMode compress = CompressionMode.Compress;
        public override void OnActionExecuting(ActionExecutingContext filterContext)
        {
            HttpRequestBase request = filterContext.HttpContext.Request;
            HttpResponseBase response = filterContext.HttpContext.Response;
            string acceptEncoding = request.Headers["Accept-Encoding"];
            if (acceptEncoding == null)
                return;
            else if (acceptEncoding.ToLower().Contains("gzip"))
            {
                response.Filter = new GZipStream(response.Filter, compress);
                response.AppendHeader("Content-Encoding", "gzip");
            }
            else if (acceptEncoding.ToLower().Contains("deflate"))
            {
                response.Filter = new DeflateStream(response.Filter, compress);
                response.AppendHeader("Content-Encoding", "deflate");
            }
        }
    }
}
به فضای نام های اضافه شده دقت کنید باید حتماً اضافه شوند !

بعد از ایجاد این کلاس کافیست بالای هر Controller صفت [EnableCompression] را اضافه کنید یا همان ابتدا بالای کلاس برای اعمال این صفت بر روی تمام کنترل ها  !!!  مانند مثال زیر :

using System.Web.Mvc;
namespace Test.Controllers
{
    public class HomeController : Controller
    {
        public ActionResult Index()
        {  return View(); }

        [EnableCompression]
        public ActionResult TestPageSize()
        {  return View();  }
    }
}

 

 

 

بنده از این کنترولر یک ویو ایجاد کردم برای مثال یک بار بدون [EnableCompression] که حجم صفحه همان حجم اصلی بوده یعنی 3.38kb و بار دوم با استفاده از صفت بعد از فشرده سازی به 2.68kb کاهش پیدا کرده است !

 

نکته !!!  این کتابخانه فقط روی متن عمل فشرده سازی را انجام می دهد نه عکس و فایل .....!

 

مجید رمضانی

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

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

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