PDA

View Full Version : مشکل در استفاده از قابلیت HTTP Compression



پدرخوانده
دوشنبه 16 مرداد 1385, 13:41 عصر
در یک سایت داینامیک در فایلی که قرار است که اطلاعات را از جداول خوانده و نمایش دهد از تابع ob_start() جهت فعال سازی این قابلیت (فشرده سازی اطلاعات) استفاده کرده ام
(البته فرقی در فایل وب موردنظر نیست اشاره به جداول جهت روشن شدن موضوع است که اطلاعات سایت به صورت داینامیک می باشد و قرار است از جدول خوانده و نمایش داده شود)
طبق جستجوی بنده جهت فعال سازی این قابلیت در سرور با استفاده از فایل htaccess و یا تغییر در فایل php.ini (که معمولا مقدور نیست) این تنظیمات را باید انجام داد
روش اول:
output_buffering = On
output_handler = ob_gzhandler
zlib.output_compression = Off
روش دوم:
output_buffering = Off
output_handler =
zlib.output_compression = On
و حالا مشکل بنده در این است که در روش دوم بعد از تنظیم صفحه موردنظر را به صورت کدهای چرت و پرت نمایش می دهد (البته قابلیت zlib فعال (enabled) می باشد)
و در روش اول به هنگام فراخوانی تابع ob_start با پارامتر ob_gzhandler اشکال می گیرد
می خواستم بدانم که اینکه اولا از کجا می توان مطمئن شد که این قابلیت اکنون در سایت فعال است یا خیر؟ (یعنی آیا سرعت نمایش صفحات بهینه شده یا خیر؟)
و دیگر اینکه چه تفاوتی در دادن این پارامتر ( ob_gzhandler ) به تابع ob_start هست ؟
(فکر کنم در صورت استفاده از روش اول وجود آن الزامی است و در روش دوم عدم وجود آن وآیا اینچنین است؟)
و آیا در کل الزام به بستن آن در انتهای فایل می باشد
(به هنگام استفاده از تابع ob_clean() و یا ... هیچ مطلبی در صفحه نمایش نمی یابد)

با استفاده از تابع microtime و کنترل آن در ابتدا و انتهای فایل زمان لود صفحه را مشخص کرده ام (در پایین صفحه نمایش می دهد) ولیکن نتیجه ای از آن نگرفتم (چرا که اولا بین دو مرورگر ie و firefox همواره تفاوت بسیار بود (در firefox کندتر بود (زمان بیشتری داشت) ) و دیگر اینکه در هربار رفرش مقدار متفاوتی می داد و حتی با غیرفعال کردن خط دستور ob_start() نیز نمی توان بدست آورد که بهتر شده یا بدتر (چرا که برخی مواقع با وجود این تابع زمان نمایش صفحه طولانی تر بود ) و حتی جهت اطمینان از کش نشدن صفحه موردنظر در مرورگر (چه فایرفاکس یا ie) برای هر بار تست صفحه را می بستم و کش مروگر (از طریق گزینه تنظیمات موجود در option or internet options) را پاک می کردم که فرضا به علت خواندن از کش خود مرورگر سریعتر نیاورد (والبته با ctrl+f5 و یا دادن پارامتر عدد در انتهای مسیر بعد از علامت ؟ (مثلا به عنوان پارامتر ورودی فایل) نیز تست کردم) ولی نهایتا زمان اعلام شده زمان مناسبی نبود (چرا که اکثرا متفاوت بوده و حتی در برخی موارد با وجود ob_start زمان بیشتری داشت)

به هر حال ممنون میشم نسبت به این موضوع راهنمایی نمایید؟

armin390
شنبه 21 مرداد 1385, 18:28 عصر
راستش زیادی نوشتی!
در مورد روش اول که حالت نرماله! ولی در مورد چک کردن این که قبلاً چه handlerی برای عملیات فشرده سازی یا ... اختصاص داده شده از تابع ob_list_handlers می تونی استفاده کنی در مورد روش دومت هم برای استفاده از zlib.output_compression به جای استفاده از On باید از مقدار بافر خروجی رو تعیین کنی مثلاً 1!!
در مورد مقایسه ای که بین مرورگرها انجام دادی هم باید بگم این عمل باید در شرایط کاملاً یکسانی انجام بگیره...
ولی لازم نیست هر جایی هم خروجی رو فشرده کنی! چون ممکنه خروجی اینقدر کم باشه که اگه اون رو مستقیم به مرورگر بفرستی زمان کمتری از فشرده سازی در سرور و ارسال به کلاینت و در آوردن از حالت فشرده در مرورگر سپری بشه و شرایط دیگه...
ولی چیزی که گفتی یعنی تعیین زمان لود شدن صفحه اگه منظورت مدت زمان لود شدن در مرورگره که این کار نیاز به کار سمت کلاینت داره و البته معقول هم نیست که بدست بیاد...
در کل شما با فشرده سازی حجم اطلاعات ارسالی تون رو کاهش می دید به همون نسبت تعداد پکت های ارسالی کمتر شده و در نتیجه مشتری شما اطلاعات رو در شرایط یکسان در زمان کمتر نه با سرعت بیشتر! در یافت می کند.
بعضی سوالات هم نفهمیدم منطورت چیه شاید خوب نخوندم!