افزایش سرعت وب با gzip

با وجود اینکه روزانه دسترسی به اینترنت و به طبع آن، سرعت آن نیز افزایش می یابد اما کماکان حجم صفحه تولیدی و مقدار عناصر استفاده شده در یک صفحه وب از ارکان مهم در طراحی یک سایت یا وبلاگ هستند؛ تا جایی که گوگل نیز یکی از فاکتورهای پیج رنک خود را روی سرعت سایتها معطوف کرده است.
برای کاهش حجم صفحات یک سایت روشهای مختلفی وجود دارد. این روشها از ابتدا باید توسط طراح سایت اعمال شوند و وی برای این منظور باید سعی کند با کد نویسی بهینه و استاندارد سازی شیوهنامه، تصاویر و کدهای نگارش شده، حجم سایت را تا میزان ممکن کاهش دهد. اما همواره روشهای بهینه سازی دیگری نیز وجود دارند تا این کار را بیش از پیش عملی کنند و با این کار، علاوه بر آنکه کاربر سایت، با سرعت بیشتری صفحات را میبیند، میزان پهنای باند مصرفی خود سایت نیز به مقدار قابل توجهی کاهش مییابد.
شیوه کار GZIP
شاید خیلیها هنوز ندانند که شیوه عمل ترفند GZIP و نحوه فشرده کردن صفحه به چه صورت انجام میشود. قبل از آنکه به سراغ معرفی این روش بپردازیم اجازه دهید تا با بیان یک مثال تصویری، نحوه انجام این کار را عنوان کنیم. هنگامی که فایل صفحه ای مانند http://www.7learn.com/index.php را از مرورگر درخواست می کنید، اطلاعاتی بین مرورگر و سایت مورد نظر رد و بدل میشود که به طور مختصر شبیه به تصویر بالا است:
۱. مرورگر: سلام! لطفا فایل index.php را به من بده
۲. سرور: خوب! اجازه بده تا فایل مورد نظر را پیدا کنم
۳. سرور: پیدا کردم! این کد پاسخ شماست (۱۰۰کیلوبایت ها!!!! OK). من فایل را برایتان میفرستم
۴. مرورگر: ۱۰۰ کیلوبایت؟!!! اوه چقدر زیاد! انتظار… انتظار… بسیار خوب، بارگزاری شد
این یک مکالمه بسیار ساده (و نه کامل) از آن چیزی است که هنگام درخواست مشاهده صفحه از سوی مرورگر شما با سرور سایت انجام میگیرد.
کجای کار مشکل دارد؟
درواقع مشکل کار همین حجم بالای محتوای صفحه است. کدها و تگهای بهکار برده شده و تکراری موجود در صفحات، باعث سنگین شدن فایل آنها میشود و این امر، بارگزاری صفحه را برای کاربران آن سایت به تاخیر میاندازد. خوب حالا سوال اینجاست که چطور میتوان بدون دست بردن به کد و محتوای سایت، حجم صفحات را کاهش داد؟
تصور کنید اگر یک فایل فشرده شده (ZIP) از صفحه درخواستی کاربر را، به جای صفحه کدهای معمول سایتتان برای مرورگر وی بفرستید، میتوانید تا حد زیادی از پهنای باند مصرفی سرورتان را کاهش داده و از طرفی سرعت دانلود صفحه مورد نظر را برای او به میزان چشمگیری افزایش دهید. این دقیقا همان کاری است که GZIP برای شما میکند!
1. مرورگر: سلام! میتوانم index.php را دریافت کنم؟ اگر نسخه فشرده دارید لطفا آنرا به من بدهید.
۲. سرور: اجازه بدهید فایل را پیدا کنم. بله، همینجاست! نسخه فشرده میخواهید؟ عالی است.
۳. سرور: من index.php را پیدا کردم (۱۰۰کیلوبایت ها!!!! OK).اما نگران نباش فایل را فشرده و برایتان ارسال میکنم.
۴. مرورگر: فوقالعاده است. فقط ۱۰ کیلوبایت! آنرا از حالت فشرده خارج و به کاربر نمایش خواهم داد.
در واقع هنگامی که مرورگر به سرور سایت مراجعه میکند، با ارسال پیامی، از سرور درخواست ارسال فایل فشرده را میکند. اگر این پیام از سوی سرور پاسخ داده شد (به عبارتی دیگر، اگر سایت مورد نظر از قابلیت gzip یا deflate استفاده کند)، فایل مورد نظر برای مرورگر ارسال خواهد شد. در غیر اینصورت، همان روال عادی بارگزاری صفحه طی میشود.
بهطور ساده برای فشرده کردن فایلهای متنی خود میتوانید از ماژول deflate آپاچی استفاده کنید. برای این کار کافی است کدهای زیر را در فایل .htaccess سایت خود کپی نمایید
<ifModule mod_deflate.c="mod_deflate.c"> <filesMatch "\.(css|js|html|php)$"=""\.(css|js|html|php)$""> SetOutputFilter DEFLATE </filesMatch> </ifModule>
این کد، فایلهای CSS، JS، HTML، XHTML و PHP سایت شما را gzip میکند.
کد زیر نیز یک نمونه بسیار خوب برای فشرده سازی فایلهای مورد اشاره روی سایت شما و نیز Cache کردن دیگر فایلهای استاتیک است.
# BEGIN Compress text files <ifModule mod_deflate.c="mod_deflate.c"> <filesMatch "\.(css|js|x?html?|php)$"=""\.(css|js|x?html?|php)$""> SetOutputFilter DEFLATE </filesMatch> </ifModule> # END Compress text files # BEGIN Expire headers <ifModule mod_expires.c="mod_expires.c"> ExpiresActive On ExpiresDefault "access plus 1 seconds" ExpiresByType image/x-icon "access plus 2592000 seconds" ExpiresByType image/jpeg "access plus 2592000 seconds" ExpiresByType image/png "access plus 2592000 seconds" ExpiresByType image/gif "access plus 2592000 seconds" ExpiresByType application/x-shockwave-flash "access plus 2592000 seconds" ExpiresByType text/css "access plus 604800 seconds" ExpiresByType text/javascript "access plus 216000 seconds" ExpiresByType application/javascript "access plus 216000 seconds" ExpiresByType application/x-javascript "access plus 216000 seconds" ExpiresByType text/html "access plus 600 seconds" ExpiresByType application/xhtml+xml "access plus 600 seconds" </ifModule> # END Expire headers # BEGIN Cache-Control Headers <ifModule mod_headers.c="mod_headers.c"> <filesMatch "\.(ico|jpe?g|png|gif|swf)$"=""\.(ico|jpe?g|png|gif|swf)$""> Header set Cache-Control "max-age=2592000, public" </filesMatch> <filesMatch "\.(css)$"=""\.(css)$""> Header set Cache-Control "max-age=604800, public" </filesMatch> <filesMatch "\.(js)$"=""\.(js)$""> Header set Cache-Control "max-age=216000, private" </filesMatch> <filesMatch "\.(x?html?|php)$"=""\.(x?html?|php)$""> Header set Cache-Control "max-age=600, private, must-revalidate" </filesMatch> </ifModule> # END Cache-Control Headers # BEGIN Turn ETags Off <ifModule mod_headers.c="mod_headers.c"> Header unset ETag </ifModule> FileETag None # END Turn ETags Off <ifModule mod_headers.c="mod_headers.c"> Header set Connection keep-alive </ifModule> <IfModule mod_headers.c="mod_headers.c"> <FilesMatch "\.(js|css|xml|gz)$"=""\.(js|css|xml|gz)$""> Header append Vary: Accept-Encoding </FilesMatch> </IfModule> # BEGIN Remove Last-Modified Header <ifModule mod_headers.c="mod_headers.c"> Header unset Last-Modified </ifModule> # END Remove Last-Modified Header
با امتحان کردن این روش خواهید دید که تا چه اندازه، سرعت بارگزاری صفحات شما افزایش مییابد. برای بررسی صحت عملکرد gzip سایت خود نیز میتوانید از این سیستم آنلاین استفاده کنید.در تصویر زیر وب سایت 7learn توسط این سایت تست شده که می توانید جزئیات مربوطه را بر روی تصویر مشاهده کنید.
همانطور که در تصویر می بینید حجم واقعی صفحه 94328 بایت هستش که بعد از فشرده سازی به 18095 کاهش پیدا کرده یعنی چیزی حدود 80 درصد کاهش حجم… خیلی جالبه نه؟ حالا با محاسبات زیر جالب تر هم میشه:
حالا من می خواهم سرعت لود شدن وب سایت 7learn رو قبل و بعد از فشرده سازی براتون محاسبه کنم تا بیشتر فواید gzip رو درک کنید.
ابتدا فرض میکنیم که کاربر ما توسط سرویسی با سرعت (56kbps) به اینترنت متصل است:
تبدیل حجم واقعی صفحه به کیلو بایت:
94328/1024=92kbytes
تبدیل حجم بعد از فشرده سازی به کیلو بایت:
18095/1024=17kbytes
حالا خودتون قضاوت کنید سرعت کدام حالت وب سایت برای لود شدن بیشتره؟ آیا تمام کاربرانتون از اینترنت پر سرعت استفاده می کنند؟ قطعا پاسخ شما منفی هستش …
این یکی از راه کارهای اساسی در زمینه بهینه سازی و سئو یک وب سایت می باشد که باید مد نظر گرفته شود.
امیدوارم که این مطلب مورد توجه شما واقع شده باشد.
موفق باشید…
مطالب زیر را حتما بخوانید:
قوانین ارسال دیدگاه در سایت
- چنانچه دیدگاهی توهین آمیز باشد و متوجه اشخاص مدیر، نویسندگان و سایر کاربران باشد تایید نخواهد شد.
- چنانچه دیدگاه شما جنبه ی تبلیغاتی داشته باشد تایید نخواهد شد.
- چنانچه از لینک سایر وبسایت ها و یا وبسایت خود در دیدگاه استفاده کرده باشید تایید نخواهد شد.
- چنانچه در دیدگاه خود از شماره تماس، ایمیل و آیدی تلگرام استفاده کرده باشید تایید نخواهد شد.
- چنانچه دیدگاهی بی ارتباط با موضوع آموزش مطرح شود تایید نخواهد شد.
سلام
همونطور که شما فرمودین فایل htaccess. داخل public html بود. اما نشون داده نمیشد.
برای ایجاد تغییر، ابزار edit رو برای فایل دلخواه دیگری باز کرده و در فیلد آدرس، آدرس public_html/.htaccess رو جایگزاری کردم.
70.9% فشرده سازی شد!
متشکر
یا علی
سلام. خیلی خوب بود. ممنون از سایت خوبتون.
سلام . ممنون از وب سایت خوبتون. عالی بود.
ممنون از سایت قشنگتون. عالی بود