منبع اصلی نوشتار زیر در این لینک قرار دارد

دو نکته برای بالا بردن سرعت – آپاچی

از نکاتی که پیشنهاد میشه برای بالا بردن سرعت یه سایت این دو مساله سادست:
۱- اضافه کردن Expire Header به فایلها، و خصوصا یک زمان دور برای فایلهای استاتیک، مثلا عکسها و فایلهای css و جاوااسکریپت. البته بد نیست برای فایلهای php و html هم این زمان رو تعیین کنیم ولی نه چندان دور.
۲- کمپرس کردن فایلهای متنی با متد gzip و فرستادن اونها به کلاینت به جای ارسال محتوای فشرده نشده.

برای هر دو در خود PHP امکاناتی هست، ولی مشکلاتی هم هست. این امکانات که در PHP هستن، طبیعیه که فقط برای فایلهای PHP کار میکنن نه مثلا فایلهای CSS یا JS که اونها مهمترن برای اینکار. یعنی شما میتونید با دستور header استفاده کنید برای ویرایش http header و از تنظیمات PHP هم gzip رو فعال کنید، ولی این فقط برای فایلهایی که PHP پردازش میکنه اعمال میشن نه همه فایلها.
اینجا آپاچی میتونه خیلی کمک کنه. برای اینکار باید دو ماژول معروف‌آپاچی رو نصب کنید.

mod_headers
این ماژول، به شما اجازه میده به راحتی Http Header مربوط به یک فایل رو (و در کل تمام پاسخها رو) ویرایش کنید. اول مطمئن بشید روی سرورتون نصبه. بسته به نسخه مورد استفاده شما، میتونید با دستور :

apache2ctl -l 

یا دستورات مشابه، لیست ماژولهای نصب شده تو آپاچی رو ببینید و مطمئن بشید که این ماژول وجود داره. (نکته جالب اینه که من همیشه این دستور رو میزنم و این ماژول رو لیست نمیکنه! در صورتیکه نصبش کردم و کار هم میکنه! از آرچ ۶۴ بیتی استفاده میکنم و Zend Server CE )‌

حالا به راحتی میتونید از Header توی فایل htaccess استفاده کنید. یه چیزی مثل این رو میتونید توی فایل htaccess بنویسید :

<IfModule mod_header.c>
	Header unset Pragma
	FileETag None
	Header unset ETag
	 
	# cache images/pdf/css/js for 10 days
	<FilesMatch "\.(ico|pdf|jpg|jpeg|png|gif|js|css)$">
	  Header set Cache-Control "max-age=864000, public, must-revalidate"
	  Header unset Last-Modified
	</FilesMatch>
	 
	# cache html/htm/xml/txt diles for 2 days
	<FilesMatch "\.(html|htm|xml|txt|xsl)$">
	  Header set Cache-Control "max-age=7200, must-revalidate"
	</FilesMatch>
</IfModule>

البته تو این مثال از FileMatch هم استفاده کردم که توی هسته آپاچی هست به صورت پیشفرض.
تو این مثال ETag رو هم غیر فعال کردم (خطوط ۳ و ۴)که اونم به این دلیله : Best Practices for Speeding Up Your Web Site (آخر قسمت Configure ETags منظورمه، کامل بخونیدش)
و بعد برای فایلهای عکس، pdf ، CSS و جاوا اسکریپت، زمان انقضای ۱۰ روز رو انتخاب کردم(خطوط ۷ تا ۱۰ ) و بعد برای فایلهای متنی استاتیک (نه php البته) مدت زمان انقضای ۲ روز (خطوط ۱۳ تا ۱۵)
کد بالا رو تو htaccess کپی کنید، کار کرد که چه خوب! اگه کار نکرد یعنی ماژول مورد نظر نصب نیست. برای مطمئن شدن از کار کردنش، از افزونه Y!Slow استفاده کنید، یا دو خط اول و آخر (IfModule) رو حذف کنید و ببینید Internal Server Error میگیرید یا نه، اگه خطا نداد یعنی همه چی درسته.

mod_deflate
این یکی به شما امکان میده که به راحتی قابلیت فشرده سازی رو روی فایلهاتون فعال کنید. توصیه من فشرده کردن همه فایلهای CSS و جاوا اسکریپت و html هستش. اینطوری :

<IfModule mod_deflate.c>
  <FilesMatch "\.(js|css|php|htm|html)$">
    SetOutputFilter DEFLATE 
  </FilesMatch>
</IfModule>

با این روش در صورتیکه این پسوندهای به خصوص درخواست بشن توسط سرور، سرور اونها رو کمپرس شده پس میفرسته.
البته php هم معمولا خروجیش html میشه بودنش تو این لیست بدک نیست. برای امتحان درست بودن این، مثل همون که بالا گفتم عمل کنید، دو خط اول و آخر رو حذف کنید و ببینید بازم کار میکنه یا خطا میگیرید.
البته، راهنمای خود ماژول هم این فرم استفاده رو پیشنهاد کرده :

AddOutputFilterByType DEFLATE text/html text/plain text/xml 

که فرق آنچنانی نداره و شاید بعضی ها اینو دوست تر داشته باشن :)
یه نکته هم بد نیست بگم و اونم اینه که توی FilesMatch از عبارات با قاعده استفاده میشه، و مثلا

\.(html|htm|xml|txt|xsl)$

یعنی هر فایلی که تو اسمش یه نقطه باشه بعد بلافاصله html یا htm یا xml یا txt یا xsl باشه و بعدش هم بلافاصله اسم فایل تموم بشه (اون علامت $ اینو میگه!)

– یه مدتیه درگیر یه سری کار و سفارش هستم کمتر وقت میکنم بنویسم…‌



برچسب ها : , , , , , ,