آموزش بهینه سازی Enable gzip compression

لوگو Gzip
فاکتور Enable gzip compression زمانی لازم است که ما از فایلهایی استفاده میکنیم که قابل فشرده سازی هستند. اگر با فشرده سازی آشنایی نسبی هم داشته باشید متوجه خواهید شد که فایلهایی که محتوای متنی دارند را میتوان با درصد بالایی فشرده سازی کرد.
از طرفی هم سایتها از ترکیب چند فایل ایجاد میشوند که بیشتر این فایل ها متنی هستند مثل css js html با فشرده سازی این فایلها میتوانید حجم سایت را کاهش دهید و ارسال کنید.

Gzip چیست؟

Gzip یک الگوریتم فشرده سازی فایل است. الگوریتم Gzip جهت جایگزینی الگوریتم LZW طراحی شده است. Gzip برپایه الگوریتم Deflate که ترکیبی از LZ77 و کد کردن هافمن است ساخته شده است.
ویژگی‌های یک فایل فشرده شده توسط الگوریتم Gzip:
– ۱۰ بایت سرآمد: که شامل عدد جادویی، شماره نسخه و زمان تولید آرشیو است
– سرآمدهای اضافی اختیاری: مثل اسم اولیه فایل
– بدنه اصلی: شامل فایل فشرده شده با الگوریتم Deflate
– ۸ بایت پانوشت(Footer): شامل حاصل جمع CRC-۳۲ و طول فایل فشرده نشده
لوگو Gzip

What is Gzip?

gzip is based on the DEFLATE algorithm, which is a combination of LZ77 and Huffman coding.
“gzip” is often also used to refer to the gzip file format, which is:

– a 10-byte header, containing a magic number (1f 8b), a version number and a timestamp
– optional extra headers, such as the original file name,
– a body, containing a DEFLATE-compressed payload
– an 8-byte footer, containing a CRC-32 checksum and the length of the original uncompressed data.

چرا باید gzip سرور سایت را فعال کنیم؟

امروزه تمامی مرورگرهای مدرن تمامی درخواست های HTTP خود را با gzip فشرده سازی میکنند تا در مصرف ترافیک صرفه جویی کنند. اگر سرور سایت پاسخ‌های خود را با الگوریتم gzip compress فشرده سازی کند حجم نهایی سایت کاهش پیدا خواهد کرد و محتوای سایت در زمان کمتری به کلاینت (سیستم بازدید کننده) انتقال می‌یابد و زمان بارگذاری سایت کمتر می‌شود و سرعت بارگذاری سایت افزایش می‌یابد.

تاثیر gzip در صورت بارگذاری سایت

امروزه در ایران بیشتر خانواده‌ها حداقل یک اینترنت 128 مگابیت بر ثانیه را دارند. سرعت دانلود اطلاعات این پهنای باند اینترنت حدود 16 کیلوبایت است. حال شما قضاوت کنید که دریافت یک فایل 260 کیلوبایتی سریعتر خواهید بود یا دریافت یک فایل 123 کیلوبایتی؟
نمونه فعالسازی gzip سایت
همانطور که در عکس بالا مشخص است با استفاده از gzip compress حجم یک سایت را از 260 کیلوبایت به 123 کیلوبایت رساندیم یعنی چیزی حدود 53 درصد حجم سایت کاهش یافت.
اگر همین سایت بدون فشرده سازی توسط یک اینترنت 128 مگابیت بر ثانیه بخواهیم بارگذاری کنیم دریافت محتوای سایت در بهترین حالت حدود 16.25 ثانیه طول خواهد کشید (توجه کنید این زمان فقط زمان دریافت محتوای سایت است و زمان رندر صفحه سایت و زمان پاسخگویی سرور را هم باید به آن اضافه کرد تا زمان بارگذاری سایت بدست آید.) اما اگر همین سایت از فشرده سازی استفاده کند زمان دریافت فایلهای سایت توسط یک اینترنت 128 مگابیت بر ثانیه در بهترین حالت حدود 7.7 ثانیه طول خواهد کشید. این مثال نشان دهنده میزان تاثیر gzip compress در افزایش سرعت بارگذاری سایت است.

چطور gzip compress سایت را فعال کنیم؟

برای فعال سازی gzip compress یا باید به فایل تنظیمات سرور دسترسی داشته باشید و یا از فایل htaccess کمک بگیرید و یا از خطوط برنامه نویسی سمت سرور (php یا asp) کمک بگیرید.
اگر سرور آپاچ اختصاصی دارید باید از mod_deflate جهت فشرده سازی استفاه کرد. mod_deflate در سیستم عامل CentOS به صورت پیش فرض فعال است، برای اینکه مطمئن باشید که این مود فعال هست میتوانید به مسیر

/etc/httpd/conf/httpd.conf

بروید و خط دستور زیر را پیدا کنید:

LoadModule deflate_module modules/mod_deflate.so

و مطمئن شوید که این خط دستور کامنت نشده است(در اول دستور # یا // یا */ استفاده نشده باشد). بعد از فعالسازی این مود کافیست که سرور را تنظیم کرد. برای اینکار در مسیر زیر فایل deflate.conf را بسازید.

/etc/httpd/conf.d/deflate.conf

و کدهای زیر را درون این فایل قرار دهید:

<IfModule mod_deflate.c>
 AddOutputFilterByType DEFLATE text/plain
 AddOutputFilterByType DEFLATE text/html
 AddOutputFilterByType DEFLATE text/xml
 AddOutputFilterByType DEFLATE text/css
 AddOutputFilterByType DEFLATE text/javascript
 AddOutputFilterByType DEFLATE image/svg+xml
 AddOutputFilterByType DEFLATE image/x-icon
 AddOutputFilterByType DEFLATE application/xml
 AddOutputFilterByType DEFLATE application/xhtml+xml
 AddOutputFilterByType DEFLATE application/rss+xml
 AddOutputFilterByType DEFLATE application/javascript
 AddOutputFilterByType DEFLATE application/x-javascript
</IfModule>

gzip compress توسط htaccess

اگر سرور اشتراکی دارید قبل از اجاره هاست مطمئن شوید که سرور قابلیت فشرده سازی دارد و فعال است. برای اطمینان از داشتن قابلیت فشرده سازی از مشاور فروش بپرسید.
برای فعالسازی gzip compress میتوانید فایل htaccess را ویرایش کنید و از کدهای زیر استفاده کنید:

روش اول فعالسازی gzip compress توسط htaccess:

در این روش سرور فقط انواع فایلهایی که اعلام میکنیم را فشرده سازی میکند. اگر نوع فایلی توسط کلاینت درخواست داده شود که دستور فشرده سازی آن داده نشده باشد سرور آنرا فشرده نشده میفرستد.
کد فشرده سازی انواع خاصی از فایلها:

<Location />
  <IfModule mod_deflate.c>
    # فایلهای HTML و txt و css فشرده شوند
    AddOutputFilterByType DEFLATE text/html text/plain text/css
    <IfModule mod_headers.c>
      # تصحیح رسیدگی درخواستهای پروکسی سرورها
      Header append Vary User-Agent
    </IfModule>
      # seo qalebfa is here!
  </IfModule>
</Location>

با این کد دیگر مشکل ارسال فایل فشرده شده توسط پروکسی سرورها برای مرورگرهایی که محتوای فشرده پشتیبانی نمیکنند را نخواهید داشت.

روش دوم فعالسازی gzip compress توسط htaccess:

در این روش سرور تمامی فایلهایی که درخواست داده شود را فشرده سازی میکند مگر اینکه نوع فایل را ما بصورت دستی تعیین کرده باشیم که فشرده نشود.

<IfModule mod_deflate.c>
  # دستور فشرده سازی تمامی محتواها
  SetOutputFilter DEFLATE
  # لیست نوع فایلهایی که نباید فشرده شوند
  SetEnvIfNoCase Request_URI \.(?:gif|jpe?g|png|rar|zip)$ no-gzip
  <IfModule mod_headers.c>
    # تصحیح رسیدگی درخواستهای پروکسی سرورها
    Header append Vary User-Agent
  </IfModule>
    # seo qalebfa is here!
</IfModule>

# deflate.log, ایجاد فایل گزارش درصد فشرده سازی فایل ها در هر درخواست
<IfModule mod_deflate.c>
  DeflateFilterNote Input instream
  DeflateFilterNote Output outstream
  DeflateFilterNote Ratio ratio
  LogFormat '"%r" %{outstream}n/%{instream}n (%{ratio}n%%)' deflate
  CustomLog logs/deflate.log deflate
  # seo qalebfa is here!
</IfModule>

# تصحیح رسیدگی به درخواست مرورگرهای قدیمی که از فشرده سازی پشتیبانی نمیکنند
<IfModule mod_deflate.c>
  BrowserMatch ^Mozilla/4 gzip-only-text/html
  BrowserMatch ^Mozilla/4\.0[678] no-gzip
  BrowserMatch \bMSIE !no-gzip !gzip-only-text/html
  # seo qalebfa is here!
</IfModule>

با این کد دیگر مشکل ارسال فایل فشرده شده توسط پروکسی سرورها برای مرورگرهایی که محتوای فشرده پشتیبانی نمیکنند را نخواهید داشت.

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

منابع:

gzip - Wikipedia, the free encyclopedia
Enable Compression - PageSpeed Insights — Google Developers
Optimize website speed with mod_expire and mod_deflate - Linux Howtos and FAQs
Apache traffic compression with mod_deflate
Enable gzip compression | GTmetrix
آموزش بهینه سازی Enable gzip compression 4.86/5 - 7

نوشته شده توسط تیم سئو قالبفا در تاریخ 29 آگوست 2014 دسته : آموزش بهینه سازی سرعت سایت