Gzip در طراحی سایت

Gzip یکی از روش های فشرده سازی صفحات وب سایت است . این روش که قادر است بین 60-80 درصد از حجم صفحات را کاهش دهد، سرعت لود شدن آن ها را بالا می برد و می...
Gzip یکی از روش های فشرده سازی صفحات وب سایت است . این روش که قادر است بین 60-80 درصد از حجم صفحات را کاهش دهد، سرعت لود شدن آن ها را بالا می برد و می...
Gzip یکی از روش های فشرده سازی صفحات وب سایت است . این روش که قادر است بین 60-80 درصد از حجم صفحات را کاهش دهد، سرعت لود شدن آن ها را بالا می برد و می تواند تا حدی کندی سرعت اینترنت را جبران نماید. همچنین با فشرده سازی صفحات وب ، علاوه بر اینکه تعداد صفحات بیشتری توسط کاربران و موتورهای جستجو مشاده می گردند ، در مصرف ماهیانه پهنای باند نیز صرفه جویی خواهد شد .
لازم به ذکر است که استفاده نادرست از Gzip در طراحی سایت می تواند تاثیر معکوس داشته باشد !
در ادامه به معرفی و بررسی برخی از راهکار های استفاده از Gzip در طراحی سایت خواهیم پرداخت، با اینتن همراه باشید..
جهت استفاده از این راهکار ابتدا باید اکستنشن zlib را روی php نصب نمایید . به این ترتیب امکان فشرده سازی gzip به php افزوده خواهد شد .
یک راه بسیار ساده جهت فشرده سازی صفحات سایت استفاده از گزینه output_compression است. اکستنشن zlib که روی php نصب کرده ایم ، امکان فعال کردن output_compression از طریق php.ini یا htaccess و فشرده سازی خروجی فایل های php را فراهم می نماید.
مزیت استفاده از این روش فشرده سازی آن است که اگر مرورگر ، از gzip پشتیبانی کند ، خروجی تمام صفحات php بدون آنکه در برنامه تغییری ایجاد شود فشرده خواهد شد .
استفاده از این روش فشرده سازی معایبی را نیز به همراه دارد . به عنوان مثال این روش تنها خروجی فایل های php را فشرده می کند اما فایل های دیگر مانند html ، css و js فشرده نخواهند شد . بعلاوه در صورتی که از سرور ضعیف استفاده شود یا آنکه تعداد بازدید کنندگان سایت بالا برود ، بار پردازشی روی سرور به مقدار قابل توجهی افزایش خواهد یافت . چراکه در این روش امکان کش کردن خروجی به سمت سرور وجود ندارد ، بنابر این هر بار که صفحه ای بازخوانی می شود ، اطلاعات مستقیما باید از سرور خوانده شود و مجددا عملیات فشرده سازی روی آن صورت گیرد .
دومین روش استفاده از Gzip در طراحی سایت ، استفاده از ob_gzhandler به عنوان output_handler است که مزایا و معایب راه اول را داراست.
ob_gzhandler هم از طریق htaccess یا php.ini و هم به عنوان callback برای ob_start در برنامه استفاده می گردد.
php_flag output_buffering on
php_value output_handler ob_gzhandler
<?php
ob_start(“ob_gzhandler”); // place this line of code at the start of your files
?>
…
یک نکته بسیار مهم آن است که در صورت استفاده از htaccess و یا php.ini هرگز نباید خروجی با انکدینگ gzip ارسال نمایید ، چرا که محتوای صفحه دوبار انکد خواهد شد .
همچنین گفته شد که gzip در طراحی سایت قادر به فشرده سازی فایل های html ، css و js نیست . پس برای فشرده سازی آن ها نیاز به کدی داریم که نام یک فایل را دریافت کرده محتویات آن را بخواند و به خروجی بدهد. Php کار فشرده سازی فایل مورد نظر را انجام خواهد داد .
همچنین نیاز است فایلی به نام compressor.php در root سایت ایجاد کنیم تا نام فایلی که باید فشرده شود را از طریق GET دریافت کند. میتوان از قطعه کد زیر به این منظور استفاده نمود :
<?php
if (!preg_match(‘/\.(js|css|html|htm)$/i’, $_GET[‘file’])) die(‘Access Denied’);
if (!file_exists($_GET[‘file’])) die(‘File Not Found’);
readfile($_GET[‘file’]);
?>
استفاده از این کد میتواند باعث بروز مشکلاتی مانند کاهش سرعت، افزایش مصرف پهنای باند و افزایش مصرف cpu شود. برای رفع این مشکل نیاز به کدی داریم که تاریخ آخرین تغییرات فایل را به مرورگر بفرستد. در این صورت دفعات بعد که مرورگر فایل را از سرور درخواست کند ، تاریخ آخرین نسخه موجود در کش هم به سرور فرستاده می شود و این تاریخ با تاریخ فایل مقایسه می گردد و در صورت یکسان بودن ، مرورگر از همان نسخه موجود در کش استفاده می نماید.
از کدهای زیر برای این منظور استفاده می شود :
<?php
if (!preg_match(‘/\.(js|css|html|htm)$/i’, $_GET[‘file’])) die(‘Access Denied’);
if (!file_exists($_GET[‘file’])) die(‘File Not Found’);
$mtimestr = gmdate(“D, d M Y H:i:s”, filemtime($_GET[‘file’])) . ” GMT”;
if (@$_SERVER[‘HTTP_IF_MODIFIED_SINCE’] == $mtimestr) {
header(‘HTTP/1.1 304 Not Modified’);
die();
}
header(“Last-Modified: ” . $mtimestr);
header(“Cache-Control: must-revalidate”, false);
readfile($_GET[‘file’]);
?>
راه دیگری که برای فشرده سازی فایل های html ، css و js وجود دارد ، حذف فواصل اضافی و کامنت ها از میان کدهاست .
برای این کار باید تمام لینک هایی که در سایت به شکل فایل های css و js و html هست تغییر دهیم و به جای آن لینکی به فایل compressor.php جایگزین کنیم . سپس نام فایل مورد نظر را هم به صورت پارامتر به آن ارسال نماییم .
برای آنکه نیازی به تغییر در کدهای سایت نباشد ، با استفاده از یک rewrite rule تمام request هایی که به فایل های css و js و html ارسال میشود را به فایل compressor.php می فرستیم.
در نتیجه محتوای فایلhtaccess مشابه کدهای زیر خواهد شد :
php_flag zlib.output_compression on
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} -f
RewriteRule ^(.*\.(js|css|htm|html))$ compressor.php/?file=$1
</IfModule>
برای فعال سازی gzip در طراحی سایت با جوملا سه روش وجود دارد :
1) روش اول ، فعالسازی gzip در طراحی سایت از طریق تنظیمات کلی جوملا است . بدین منظور ابتدا وارد بخش مدیریت وب سایت مورد نظر شده سپس در قسمت “سرور” گزینه “فشرده سازی gzip ” را روی “بلی” قرار داده و تنظیمات را ذخیره می کنیم .
2) دومین راه ، فعال سازی gzip در طراحی سایت در کنترل پنل cPanel است . در این روش ابتدا باید وارد بخش کنترل پنل cPanel هاست خود شویم . سپس از تب Software/Services گزینه Optimize Website را انتخاب و بعد از آن گزینه Compress all content را فعال کرده، تنظیمات را ذخیره کنیم .
3) سومین و آخرین روش قرار دادن کدهای فعال کردن Gzip در فایل htaccessدر روت هاست. اما قبل از آن باید نام فایل htaccess.txt را به htaccess. تغییر دهیم تا کدهای مربوطه به درستی کار کنند.
جهت فعالسازی gzip با اچ تی اکسس تنها کافی است که از فایل htaccess سایت مورد نظرتان بک آپ بگیرید و سپس کدهای زیر را در انتهای htaccess کنید :
# BEGIN GZIP
<ifmodule mod_deflate.c>
AddOutputFilterByType DEFLATE text/text text/html text/plain text/xml text/css application/x-javascript application/javascript
</ifmodule>
# END GZIP
در پایان htaccess را ذخیره کنید .
شرکت طراحی سایت و سئو سایت اینتن ارائه دهنده ی جدیدترین و بهترین راهکار ها در زمینه ساخت سایت و بهینه سازی سایت برای کسب و کار شما می باشد،
با اینتن بروز باشید…