نقطه ویرگول;

هر از گاهی از هر چیزی

هر از گاهی از هر چیزی

فشرده سازی آسان با تکنیک Gzip توسط PHP

جمعه, ۲۸ آبان ۱۳۸۹، ۰۷:۲۷ ب.ظ
Gzip چیست؟
Gzip یک الگوریتم فشرده سازی همانند Zip و SIT ایست.استفاده از این الگوریتم بسیار متدوال بوده و اگر شما با داده های غیر فشرده سر و کار دارید میتوانید انبوهی از فضاهای خالی را توسط Gzip کردن فایلهایتان بدست آورید.یک فایل تصویری پیش از این با ااستفاده از الگوریتم jpeg یا gif فشرده میشد و چنانکه به صورت یک داده طبیعی باشد،فشرده سازی دوباره با Gzip تاثیر چندانی در آن نخواهد داشت.

ولی اگر شما یک فایل متن خام،یا حتی بهتر از آن مثل فایلهای xml یا html داشته باشید برای شما نتجیه ی مطلوبتری خواهد داشت.
ولی بسیاری از مردم چنین فکر نمیکنند،چرا که فایلهای تصویری همیشه حجمی بیشتر از یک فایل html  برای آنها دارد.اما فایلها html در حال رشد و بزرگ شدن توسط قالب صفحه های بسیار پیچیده  و چیزهایی شبیه JavaScript هستند.فایلهای40 کیلوبایت html بسیار معمولی و پیش پا افتاده هستند.حال وقتی شما در مورد چیستی فایل html فکر میکنید.بسیاری از این فایلها را شامل تگ های HTML که بسیار شبیه به هم  بوده که بارها و بارها تکرار شده اند،میدانید.فشرده سازی HTML یکی از بهترین نمونه هایی از فشرده سازی است که میتوان نام برد.شما به راحتی میتوانید یک فایل 40 کیلوبایتی را به پایین تر از 3 کیلوبایت برسانید.
اما این کار را چگونه تحقق بخشیم؟
این باور خیلی دور از دسترس نیست.تقریبا تمامی مرورگرها از متحوای Gzip  شده پشتیبانی میکنند.این تکنیک برای سالهای زیادی در داخل آنها تعبیه شده است.طوریکه استفاده از آن برای کسی دردسر ساز نباشد.
سه راه اصلی برای Gzip  کردن کدهایتان دارید.دو مورد استفاده از mod_gzip می باشد.اکنون نیز روش mod_gzip کار میکند  ولی باید صادقانه گفت که تنظیمات آن بسیار درد سر ساز است.زمانیکه آنرا پیکر بندی کردید میتوانید از آن دو روش را استفاده کنید.آپاچی هم میتواند به صورت خودکار تمامی فایلهای HTML  را Gzip  بدون فایلها قبلی.یا حتی شما میتوانید دو نسخه از هر صفحه را روی هاستتان ذخیره کنید.یک نسخه Gzip شده و یک نسخه عادی و با قاعده.
برای مثال،شما در دایرکتوری Home دارید:
Index.html
و
Index.gz
مرورگرهایی که gzip را پشتیبانی میکنند فایل gz  را دریافت میکنند و آنهایی که پشتیبانی نمیکنند از فایل html استفاده میکنند.در هر صورت شما mod_gzip را تنظیم میکنید.آپاچی به صورت خودکار فایلهای فشرده(gzip) را به مرورگرهایی که از آن پشیبانی میکنند، ارسال میکند و الا فایل html را خواهد فرستاد.
ودر طرف کلاینت هیچ تغییری،تفاوتی در ارسال صفحات وجود ندارد.خروج از حالت فشردگی و لود به صورت کامل و از نگاه کاربر بسیار یکسان است و هیچ تفاوتی ندارد.
با این حال شما ممکن است فکر کنید این کار بسیار مشقت آور خواهد بود که یک کپی gzip شده از هر صفحه در سایتتان باشد.حق با شماست،شما نباید این کار رو انجام بدید.در اینجا حقیقت زیبای  gzip نمایان می شود.چرا که  فایلهای به این کوچکی زمان قبل توجهی از انتقال فایلها رو کسر میکنند.و همچنین  وب سرور برای برقرار کردن یک ارتباط زیاد منتظرنخواهد ماند.
این رو هم اضافه کنم که در حقیقت شما دارید یک پهنای باند قابل ملاحضه ای که هر ماه استفاده میکنید را ذخیره میکنید.و در حقیقت کاربران با اینترنت پر سرعت سایت شما رو با سرعت اندکی سریعتر و کاربران دایال آپ سایت شما را با سرعتی قابل ملاحظه سریعتر بارگذاری میکنند.
بخش منفی کار کجاست؟
پیکربندی.تنظیمات آن بسیار مشقت آور و درد سر ساز است.و اگر یک وب هاست داشته باشید.اغلی نمی تنوایند از mod_gzip استفاده کنید.و اگر سایتتون رو از یک سرور به سرور دیگری انتقال دهید باید دوباره از نو آنرا تنظیم کنید.اگر ممکن باشد.
به همین دلیل من راه سوم رو به شما پیشنهاد میکنم که بسیار آسان است.با این روش شما فکر خواهید کرد کارهایی که انجام داده اید بسیار اشتباه بوده است.mod_gzip را فراموش کنید.در عوض از PHP استفاده کنید.
فقط کافیست همه ی شما کد زیر را در بالای هر سند php قرار دهید و منتظر جادوی آن باشید.تمامی صفحات html شما فشرده خواهد شد.
کد:
 ob_start("ob_gzhandler"); ?>
این کار بسیار آسان است،فقط کافیست آنرا در شروع کدهای PHP تان قرار دهید.آن به صورت خودکار آنرا را برای مرورگرهایی که gzip را پشتیبانی  میکنند فشرده میکند.در ضمن این شیوه قابل حمل است.همچنین بدون نیاز به پیکر بندی.شما می توانید سایتتان را به سرور دیگری منتقل کنید و تمامی سرور هایی که از php استفاده میکنند به صورت خودکار کد های شما رو فشرده میکنند.
چگونه از صحت کار مطمئن شویم:
Gzip به نرمی و آرامی کار میکند.شک نکنید و در تعجب باشید که "آیا آن کار میکند؟"من اینجا راهی ساده برای بررسی آن ارائه میکنم.تنها آزماینده Gzip سایت شماست.آدرس وبسایتتان را تایپ کنیید.
شما متوانید به صورت دستی چک کنید.صفحات خود را در فایرفاکس بارگذاری کنید.حال از منوی Tools گزینه ی Page Info رو انتخاب کنید.حال در پنجره ی باز شده شما میتوانید مقدار سایز صفحه را ببیند.آن مقدارحجم  واقعی است که بر روی اینترنت منتقل شده است.حال به منوی فایل رفته و صفحه خود را ذخیره کنید.و حال حجم فایل اچ تی ام ال ذخیره شده را بررسی کنید.اگر شما از gzip استفاده نمیکردید در پنجره ی باز شده حجمی معادل با صفحه ی ذخیره شده خواهید داشت.
شما با این کار قدرت Gzip را خواهید دید.
موافقین ۰ مخالفین ۰ ۸۹/۰۸/۲۸

نظرات  (۴)

یه راه حل دیگه هم هست می تونید فایل .htaccess رو ادیت کنید اینطوری:
Header set Expires "Thu, 15 Apr 2012 20:00:00 GMT"

#Compress
SetOutputFilter DEFLATE

برای تست میزان کاهش پهنا باند هم می تونید از این وب سایت استفاده کنید.
http://www.gidnetwork.com/tools/gzip-test.php

۲۸ دی ۸۹ ، ۱۵:۳۳ خبر سوئد
تست کردم تا 85% فایل رو ها فشرده میکنه , خیلی عالی هست
ممنون
۱- مشکل اینه که فقط برای فایلهایی که از PHP استفاده میکنن کار میکنه.
۲- استفاده از این، طبق گفته راهنمای PHP بهتره از تنظیمات PHP.INI استفاده بشه، http://www.php.net/manual/en/function.ob-gzhandler.php
Note دوم.
بخش اول رو متوجه نشدم،خب قراره که برای فایلهای پی اچ پی این کار رو انجام بدیم.
در مورد بخش دوم هم بله درسته ولی این مسئله چندان مهم نیست و در پی اچ پی.نت فقط نسبت به ob_gzhandler ارجع دونسته شده،در این مقاله سعی شده راه حل ساده تر و در عین حال پرتابل و بی دردسر برای خوانندگان مطرح بشه.
موفق باشید

ارسال نظر

ارسال نظر آزاد است، اما اگر قبلا در بیان ثبت نام کرده اید می توانید ابتدا وارد شوید.
شما میتوانید از این تگهای html استفاده کنید:
<b> یا <strong>، <em> یا <i>، <u>، <strike> یا <s>، <sup>، <sub>، <blockquote>، <code>، <pre>، <hr>، <br>، <p>، <a href="" title="">، <span style="">، <div align="">
تجدید کد امنیتی