PDA

View Full Version : سوال: این مشکل از gzip هست یا افزونه های فایرباگ و yslow به درستی اجرا نمی شن؟



idocsidocs
دوشنبه 13 تیر 1390, 14:56 عصر
من برای فشرده کردن محتویات وب سایتم از کد زیر استفاده می کنم.

<ifModule mod_deflate.c>
<filesMatch "\.(css|js|php|x?html?)$">
SetOutputFilter DEFLATE
</filesMatch>
</ifModule>
وقتی سایتم رو با افزونه yslow چک می کنم، توی بخش مربوط به فشرده سازی لینکهای زیر رو به عنوان فایلهایی که به فشرده سازی احتایج دارن مشخص می کنه، یعنی این فایلها فشرده نشدن.

http://localhost/login/
http://localhost/style/admin.cssلینک اول صفحه ورد به سایتم هست، لینک دوم هم فایل سی اس اس هست، با توجه به کد مربوط به فشرده سازی که در بالا قرار دادم چرا این هشدار نمایش داده می شه؟

مشکل دیگه ای که هست اینه که فایرباگ این فایلها رو به عنوان فشرده شده معرفی می کنه. بنظر شما چه مشکلی پیش اومده که این افزونه فایرفاکس به درستی کار نمی کنن !

eshpilen
دوشنبه 13 تیر 1390, 20:44 عصر
به اینصورت تست میکنیم:

فایل test.php

<?php

$host='localhost';

$file='/style/admin.css';

$fp = fsockopen($host, 80, $errno, $errstr, 30);
if (!$fp) {
echo "$errstr ($errno)\n";
} else {
$req = "GET $file HTTP/1.1\r\n";
$req .= "Host: $host\r\n";
$req .= "Accept-Encoding: gzip,deflate\r\n";
$req .= "Connection: Close\r\n\r\n";
fwrite($fp, $req);
$resp='';
while (!feof($fp)) $resp.=fgets($fp, 128);
echo '<pre>';
echo htmlspecialchars($resp);
echo '</pre>';
fclose($fp);
}
?>

اگر فایل admin.css که از سرور برگردونده میشه فشرده شده باشه، شما در خروجی این برنامه چیزی شبیه این رو مشاهده میفرمایید:

HTTP/1.1 200 OK
Date: Fri, 09 Dec 2011 17:27:48 GMT
Server: Apache/2.2.14 (Win32) PHP/5.3.2
Last-Modified: Fri, 09 Dec 2011 17:20:57 GMT
ETag: "3a00000000b992-18-4b3ac0219f026"
Accept-Ranges: bytes
Vary: Accept-Encoding
Content-Encoding: gzip
Content-Length: 39
Connection: close
Content-Type: text/css

Л������+╔╚,V�вDЕТ╘т^оD0 х�OЩе<���

هدر Content-Encoding داره میگه این دیتا فشرده شده هست، و ضمنا خود دیتا که مشاهده میفرمایید به شکلی ناخوانا هست.

اما اگر فشرده سازی صورت نگیره چیزی شبیه این رو در خروجی برنامه میبینید:


HTTP/1.1 200 OK
Date: Fri, 09 Dec 2011 17:29:13 GMT
Server: Apache/2.2.14 (Win32) PHP/5.3.2
Last-Modified: Fri, 09 Dec 2011 17:20:57 GMT
ETag: "3a00000000b992-18-4b3ac0219f026"
Accept-Ranges: bytes
Content-Length: 24
Connection: close
Content-Type: text/css

this is a test
aaaaaa
البته بنده در فایل admin.css اون عبارتها رو که میبینید ذخیره کرده بودم. محتوی فایل admin.css شما هرچی باشه همون رو بجاش مشاهده خواهید کرد.

ضمنا بعنوان یه نکتهء جالب اگر مقدار هدر Content-Length در هر دو پاسخ رو با هم مقایسه کنید متوجه میشید که حجم دیتایی که فشرده شده بوده بیشتر از حجم دیتای فشرده نشده است!! علت اینه که فشرده سازی به نوع و حجم دیتا بستگی داره. بصورت دقیقتر یعنی باید در دیتا عبارت های تکراری کافی وجود داشته باشه تا الگوریتم فشرده سازی عملا کار قابل توجهی بکنه. در اینجا چون حجم دیتای ما خیلی کم بوده و عبارتهای تکراری نداشته در نتیجه چیز خاصی هم برای فشرده سازی وجود نداشته و درمقابل، افزودن هدرها و اطلاعات مورد نیاز مربوط به فرمت فشرده خودش باعث افزایش حجم دیتا شده (البته این افزایش حجم طبیعتا خیلی کم و قابل نادیده گیری هست).
فشرده سازی روی فایلهایی که از قبل فشرده شده هستن، مثل تصاویر JPG, GIF, PNG و فایلهای ZIP, SWF و غیره هم نتیجهء مشابهی داره. یعنی حجم شکل فشرده شدهء این فایلها اگر بخاطر هدرها و اطلاعات افزوده شده توسط فرمت فشرده مقدار کمی بیشتر از شکل فشرده نشدهء اونها نشه، اغلب حداکثر فشرده سازی ناچیزی بدست میده (که به هیچ وجه ارزش پردازش و منابع مصرف شده رو نداره).

idocsidocs
دوشنبه 13 تیر 1390, 22:27 عصر
به اینصورت تست میکنیم:
فشرده سازی روی فایلهایی که از قبل فشرده شده هستن، مثل تصاویر JPG, GIF, PNG و فایلهای ZIP, SWF و غیره هم نتیجهء مشابهی داره. یعنی حجم شکل فشرده شدهء این فایلها اگر بخاطر هدرها و اطلاعات افزوده شده توسط فرمت فشرده مقدار کمی بیشتر از شکل فشرده نشدهء اونها نشه، اغلب حداکثر فشرده سازی ناچیزی بدست میده (که به هیچ وجه ارزش پردازش و منابع مصرف شده رو نداره).
وقتی با فایر باگ چک می کنم عبارتAccept-Encoding gzip, deflate توی خروجی وجود داره. ولی وقتی با YSLOW چک می کنم می گه که باید از فشرده سازی استفاده کنی.

این در صورتی هست که من کدهای مربوط به فشرده سازی رو بکار می برم.

بنظرتون مشکل چیه؟