آموزش بهینه سازی Enable gzip compression
فاکتور Enable gzip compression زمانی لازم است که ما از فایلهایی استفاده میکنیم که قابل فشرده سازی هستند. اگر با فشرده سازی آشنایی نسبی هم داشته باشید متوجه خواهید شد که فایلهایی که محتوای متنی دارند را میتوان با درصد بالایی فشرده سازی کرد.
از طرفی هم سایتها از ترکیب چند فایل ایجاد میشوند که بیشتر این فایل ها متنی هستند مثل css js html با فشرده سازی این فایلها میتوانید حجم سایت را کاهش دهید و ارسال کنید.
Gzip چیست؟
Gzip یک الگوریتم فشرده سازی فایل است. الگوریتم Gzip جهت جایگزینی الگوریتم LZW طراحی شده است. Gzip برپایه الگوریتم Deflate که ترکیبی از LZ77 و کد کردن هافمن است ساخته شده است.
ویژگیهای یک فایل فشرده شده توسط الگوریتم Gzip:
– ۱۰ بایت سرآمد: که شامل عدد جادویی، شماره نسخه و زمان تولید آرشیو است
– سرآمدهای اضافی اختیاری: مثل اسم اولیه فایل
– بدنه اصلی: شامل فایل فشرده شده با الگوریتم Deflate
– ۸ بایت پانوشت(Footer): شامل حاصل جمع CRC-۳۲ و طول فایل فشرده نشده
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 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