PDA

View Full Version : ارسال فایل های کلاینت بصورت gzip توسط Apache



sweb
پنج شنبه 01 آذر 1386, 03:31 صبح
درود.

خواستم یکی از روش های کاربردی و خوب برای افزایش سرعت لود شدن سایتتون رو مطرح کنم و استفاده از Apache Module mod_deflate (http://httpd.apache.org/docs/2.0/mod/mod_deflate.html) برای ارسال فایل های کلاینت مثل Javascript و CSS :

این کار رو شما می تونین با یک خط کد برای صفحات php خود انجام بدین


<?php

ob_start("ob_gzhandler");

?>

ولی برای فایل های Javascript و CSS بهترین را استفاده از Apache هستش!

این یک کد Apache هستش که میشه تو httpd.conf یا .htaccess قرار داد، که البته من پیدا کردم و نمی دونم تا چه حد خوب کار می کنه!



# Netscape 4.x or IE 5.5/6.0
BrowserMatch ^Mozilla/4 no-gzip
# IE 5.5 and IE 6.0 have bugs! Ignore them until IE 7.0+
BrowserMatch \bMSIE\s7 !no-gzip
# IE 6.0 after SP2 has no gzip bugs!
BrowserMatch \bMSIE.*SV !no-gzip
# Sometimes Opera pretends to be IE with "Mozila/4.0"
BrowserMatch \bOpera !no-gzip
AddOutputFilterByType DEFLATE text/css
AddOutputFilterByType DEFLATE text/javascript
AddOutputFilterByType DEFLATE application/x-javascript
Header append Vary User-Agent


این روش رو توصیه می کنین یا خیر!
خواستم بدونم بهترین و بهینه ترین نوع این کد چی می تونه باشد؟
استفاده از خروجی gzip رو برای فایل های php پردازش شده توصیه می کنید یا نه؟ (با توجه به اینکه مشکل پردازش در کامپیوتر های کنونی کمتر وجود داره هم سرور و هم کلاینت)

sweb
پنج شنبه 01 آذر 1386, 03:37 صبح
چیز دیگه هم که پیدا کردم شما بعد از کمپرس کردن فایل های مثلاً جاوا اسکریپت و ذخیره اونها به پسوند *.jgz می تونین از دستور زیر هم استفاده کنید :


RewriteEngine on
RewriteCond %{HTTP_USER_AGENT} “.*Safari.*” [OR]
RewriteCond %{HTTP:Accept-Encoding} !gzip
RewriteRule (.*)\.jgz$ $1\.js [L]

AddType “text/javascript;charset=UTF-8″ .jgz
AddEncoding gzip .jgz

Folaani
پنج شنبه 01 آذر 1386, 14:17 عصر
کارایی فشرده سازی بستگی به نوع و خصوصیات داده داره.
متن معمولا خوب فشرده میشه؛ اما متن تا متن فرق میکنه!
نیازی به توضیح نیست که چیزهایی که از قبل فشرده شدن (مثل تصاویر گیف، جی پی جی، و خیلی انواع فایلهای دیگه) دیگه چندان فشرده نمیشن یا حتی ممکنه حجمشون کمی زیاد هم بشه با فشرده سازی مجدد (مقدار ناچیزی البته که نشون میده هیچ جایی برای فشرده سازی نداشتن).
خیلی سایتها دارن از فشرده سازی استفاده میکنن؛ مثل همین فروم! ویکی پدیا! فرومهای فارسی معروف و حرفه ای. ...
در نهایت شما باید تست کنید؛ چون این بستگی به خصوصیات سرور و دیتای شما داره و تنگه های محدود کنندهء ویژهء کار شما.


این پست بنده در یک فروم دیگر بوده:


کلا این سایت نیست، خیلی سایتها اینطوری هستن ظاهرا.
البته بقول دوستمون خیلی هم کند نیستن و شاید بیشتر در مقابل سایتهای سبکتر و سریعتر به چشم میان.
ظاهرا زیاد به نرم افزار (مثلا وی بالتین و غیره) بستگی نداره و در همهء انواع نرم افزارهای فروم دیده میشه.
حالا اینها میتونه بعلت تنظیم کش غیر بهینه باشه، میتونه بخاطر فارسی بودن و ضمنا حجم زیاد متن صفحات باشه (حروف انگلیسی تک بایتی ارسال میشن ولی فارسی بایتهای بیشتری میخواد)؛ بخصوص در این حالت فشرده سازی میتونه کمک کننده باشه. حتی این حجم میتونه تاثیر معکوس روی بار پردازش داشته باشه، بالاخره دیتای بیشتر میخواد ارسال بشه و ممکنه یک زیپ کردن در مجموع حتی بار کل پردازشی رو در بخشهای مختلف سرور کاهش بده.
میتونه علت پیچیده بودن ساختار و زیاد بودن تگهای داخل صفحات باشه که دید نمیشن. و و و...
میتونه ترکیبی از همه یا چنتای این عوامل باشه خلاصه.
ضمنا باید کاربرها حرفه ای باشن تا تفاوت سرعت رندر شدن رو با مشکل انتقال از شبکه یا کند بودن سرور تشخیص بدن. ممکنه صفحه ای حجیم نباشه و سرور هم به سرعت پردازش و ارسالش کنه، اما رندر شدنش در مرورگر کاربر واقعا سنگین باشه (بسته به ساختار داخلی صفحه هست) و بخصوص روی سیستمهای ضعیف به چشم بیاد (مثل سیستم پنتیوم تری بنده!!).

راستی شما میتونید برای فایرفاکس extension های live http headers و header monitor رو نصب کنید تا بتونید سریع و راحت به خصوصیات ناپیدای صفحات پی ببرید.
مثلا الان بنده یک سایت دیگه رو که نسبتا سریع باز میشه و از وی بالتین هم استفاده میکنه با این ابزارها بررسی سریعی کردم؛ مشخص شد که صفحهء ارسالی با فشرده سازی gzip ارسال شده.
میتونید header monitor رو تنظیم کنید تا هدر مورد نظر (در اینجا content-encoding) رو در نوار وضعیت مرورگر، برای هر صفحه نشون بده. البته درصورت وجود چنین هدری، که اگر صفحه فشرده شده باشه حتما وجود داره.
ظاهرا header monitor از live http headers استفاده میکنه و بنابراین باید اون رو هم نصب کرده باشید.
ضمنا سایت سریع تست شده که از فشرده سازی استفاده میکنه این هست (تنها بعنوان یک نمونه): http://barnamenevis.org/forum/index.php
---------
اضافه با ویرایش:
اینهم یک سایت دیگه: http://forum.hammihan.com/
بازهم gzip

اینها سایتهای حرفه ای هستن. تاجایی که میدونم هممیهن سرور اختصاصی هم داره و یکی از فرومهای پرترافیک هست. بیشتر از پهنای باندش هم این قدرت پردازشی سرور هست که محدودیت ایجاد میکنه (بنا به گفتهء ادمینش).
رندر شدنش ظاهرا کمی مشکل داره، اما بازهم در مجموع سریعتر از این سایت باز میشه و کانکشن زود از فعالیت می افته.
بهرحال اینکه این سایتها، فشرده سازی رو بکار گرفتن میتونه دلیل درستی و محک خورده بودن این روش باشه در چنین کاربردهایی. حداقل برای کاربران فارسی زبان فرومهای ما و اتصالات دیالاپشون!

sweb
پنج شنبه 01 آذر 1386, 15:58 عصر
استفاده از gzip با در نظر گرفتن تمامیه مزایا و معایبش به نظر من روش خوب یا بهتره بگم عالیه!

یکی از بهترین دلایل واسه اثبات حرفم اینه که همونتوری که Folaani گفت بسیاری از سایت های بزرگ مثل ویکی پدیا و چیزی که منن فهمیدم صفحه خانگی یاهو (که به جرات میشه گفت یکی تز پر بیننده ترین صفحات وب دنیاست) از gzip استفاده می کنن.

جالبه بدونین گوگل به خاطر سرور های عجیبش خروجی html صفحه اون بدون هیچ Tab یا Enter و یا Space اضافی هستش و کد هاش پشت سر هم و Optimize شده هستش و احتیاجی به gzip نداره چون عملاً بازده ای نخواهد داشت، این تکنینک برای صفحاتی پر از space tab و یا enter هایی موجود میان تگ های html،css و javascript دارای بهره وری خوبیه!

در آخر میخوام یکی بهترین کد موجود Apache برای فشرده سازی فایل های کلاینت رو اینجا بزاره تا گفتگو مفید بشه!

:لبخند:

oxygenws
جمعه 02 آذر 1386, 04:26 صبح
برای کار کردن خوب یک سرور، سه راس یک مثلث که شامل «حافظه»، «هارد» و «پردازنده» میشه، باید درست کنار هم کار کنند.

با فعال کردن gzip شما پردازش و در ابعادی مصرف حافظه رو زیاد می کنید و مقداری استفاده از هارد بیشتر میشه، اما به جاش حافظه زودتر خالی میشه (چون بسته زودتر به سمت کلاینت ارسال میشه).

اما با غیر فعال کردنش هیچ سرباری روی حافظه و پردازنده نداریم ولی حافظهء مصرفی برای ارسال بسته بیشتر توی حافظه می مونه.

*
پس استفاده از gzip در شرایطی می تونه خوب باشه و در شرایطی می تونه بد باشه!!!

======


جالبه بدونین گوگل به خاطر سرور های عجیبش خروجی html صفحه اون بدون هیچ Tab یا Enter و یا Space اضافی هستش و کد هاش پشت سر هم و Optimize شده هستش و احتیاجی به gzip نداره چون عملاً بازده ای نخواهد داشت، این تکنینک برای صفحاتی پر از space tab و یا enter هایی موجود میان تگ های html،css و javascript دارای بهره وری خوبیه!بهتره روش فشرده سازی gzip یا کلا روش های فشرده سازی که عموما فرزندان الگوریتم huffman (http://en.wikipedia.org/wiki/Huffman_coding)هستند رو بخونی.

sweb
شنبه 03 آذر 1386, 12:18 عصر
من این کد رو تو روت سایتم گذاشتم وتاثیری بر حجم فایل نداشت (حجم فایل دریافتی رو در فایر فاکس از گزینه ی View Page Info وقتی روی صفحه سمت راست میزینی قابل مشاهده هست در کمپرس کردن توسط php این حجم کاهش پیدا می کنه ولی با این کد آپاچی تغییری نمی کنه)


<Files *.css>
SetOutputFilter DEFLATE
</Files>

مد های mod_deflate و mod_gzip هم فعال هستند.

لطفاً در مورد فشسرده سازی توسط آپاچی برای فایل های کلاینت توضیح بیشتری بدین.



یا این روش من مشکل داره و فایل های کلاینت فشرده شده به سمت کاربر نمیاد
یا اینکه فایل فشرده شده میاد ولی نمیتونم متوجه شم حجم فشرده شدش چقدره

Folaani
شنبه 03 آذر 1386, 13:34 عصر
This is a simple sample configuration for the impatient.
Compress only a few types
AddOutputFilterByType DEFLATE text/html text/plain text/xml


خواستی سی اس اس رو هم هم بهش اضافه کن!

اینم یه مدل دیگه:



The following configuration, while resulting in more compressed content, is also much more complicated. Do not use this unless you fully understand all the configuration details.
Compress everything except images
<Location />
# Insert filter
SetOutputFilter DEFLATE

# Netscape 4.x has some problems...
BrowserMatch ^Mozilla/4 gzip-only-text/html

# Netscape 4.06-4.08 have some more problems
BrowserMatch ^Mozilla/4\.0[678] no-gzip

# MSIE masquerades as Netscape, but it is fine
BrowserMatch \bMSIE !no-gzip !gzip-only-text/html
# Don't compress images
SetEnvIfNoCase Request_URI \
\.(?:gif|jpe?g|png)$ no-gzip dont-vary

# Make sure proxies don't deliver the wrong content
Header append Vary User-Agent env=!dont-vary
</Location>



منبع: Apache HTTP Server Version 2.2 Documentation

abdonsd
چهارشنبه 20 آذر 1387, 13:05 عصر
چطور باید این فایلهای
httpd.conf یا .htaccess
رو روی سرور تغییر داد؟

narsic
چهارشنبه 20 آذر 1387, 16:03 عصر
چطور باید این فایلهای
httpd.conf یا .htaccess
رو روی سرور تغییر داد؟
با سلام
با یک ویرایشگر مثل notpad بازشون کنید بعد شروع به ویرایش کنید که باید قواعدش روهم بلد باشید که یه دفعه کاری نکنید سایتتون بالا نیاد .
موفق باشید
(انتقالش بدید روی هارد بعد از ویرایش دوباره بفرستیدش روی هاست)