راه‌حل‌هایی برای افزایش و بهبود کارایی وب‌سایت

Memory Leak
وب‌اپلیکیشن‌تون رو با هر زبان برنامه‌نویسی، پلتفرم پیاده‌سازی، معماری و ... که پیاده‌سازی می‌کنین، در وهله اول [که خب واضح و مبرهن‌ه] Error یا Exception نباید داشته باشه، ولی خب نکته مهم‌تر اینه که برنامه شما تحت هیچ شرایطی Memory Leak نباید داشته باشه. Memory Leak سرطان یه نرم‌افزاره. اگه یه جایی تو اپلیکیشن شما leak وجود داشته باشه، شما عملا با دست خودتون دارین بار اضافی به سرورتون تحمیل می‌کنین، باعث شدین Response Time صفحاتون بیشتر بشه، و خب احتمالا مجبور می‌شین به طور متناوب سرور رو restart کنین و ...

خب پس فرض ما الان اینه که برنامه شما به خودی خود کاملا صحیح و درست و بدون اشکال داره کار می‌کنه. مواردی که باید در نظر بگیرین که کارایی (Performance) وب‌سایت خودتون رو به مراتب افزایش بدین شامل این موارده:

۱) DNS Lookup
به ازای هر دومینی که محتویات صفحه شما از اونجاها آورده می‌شه یه Request و بالطبع یه DNS Lookup باید انجام بشه. هر چی تعداد این «گشتن»‌ها کمتر باشه، responseی که به براوزر می‌رسه کاهش پیدا می‌کنه. پس بنابراین هرجا که امکان‌ش رو داشته باشین بهتره که از آدرس‌های relative استفاده کنین تا آدرس‌های کامل. مثلا foo/bar.js/.. به جای http://www.domain.com/foo/bar.js

۲) کم کردن تعداد HTTP Requestها
٪۸۰ response time که کاربر باید صبر کنه تا صفحه براش کامل لود بشه، زمانیه که براوزر داره متحویات صفحه اعم از عکس و فایل‌های جاوااسکرپیت و css و فلش و ... رو دانلود می‌کنه. پس هر جا که امکان‌ش رو دارین باید این فایل‌ها رو ترکیب کنین. یعنی تمام فایل‌های css رو با هم ترکیب و به صورت یک فایل آپلود کنین، فایل‌های مختلف تصویری رو ترکیب کنین و یه دونه Image Sprite آپلود کنین و از طریق attributeهای css اونها رو تفکیک کنین.

۳) استفاده نکردن از URL Redirect
استفاده از redirect با تگ Meta موردی‌ه که باعث بالا رفتن زمان ریسپانس می‌شه. بنابراین شما اگه به هر دلیلی لازم دارین که کاربر رو از یه صفحه به صفحه دیگه به صورت اتوماتیک ریدایرکت کنین این عمل رو از طریق وب‌سرور (mod_rewrite) انجام بدین.

۴) عدم وجود Bad Request
تحت هیچ شرایطی به فایل یا آدرسی که وجود نداره ارجاع نکنین. یعنی شما 404 Error رو فقط و فقط باید برای آدرس صفحه داشته باشین (یعنی باید در نظر بگیرین که این error رو handle کنین) و برای فایل‌های javascript، css، عکس و ... تحت هیچ شرایطی نباید HTTP Code 404 برگرده از سرور به براوزر کاربر. به خاطر اینکه زمان نسبتا زیادی براوزر تلاش می‌کنه اون فایل رو پیدا کنه و در نهایت هم موفق نمی‌شه.

۵) استفاده از CDN
هر براوزر به صورت هم‌زمان امکان دانلود کردن نهایتا ۴ فایل به ازای هر هاست در آن واحد رو داره. پس اگه فرض کنیم شما تو صفحتون ۲۸ تا فایل css، javascript، عکس، فلش و ... داشته باشین و تمام این موارد روی یک دومین قرار گرفته باشه براوزر طی ۷ بار هر دفعه ۴ فایل، می‌تونه تمام اونارو دانلود کنه. ولی اگه شما این فایل‌ها رو روی چندین دومین مختلف توزیع کرده باشین سرعت دانلود شدن‌تون به مراتب بیشتر می‌شه. به این توزیع کردن فایل‌ها اصطلاحا CDN یا Content Delivery Network می‌گن. مثلا سایت گوگل تقریبا تمام فایل‌هاشو داره از gstatic.com لود می‌کنه، یاهو yimage.com فیس‌بوک fbcdn.com و ... که این دومین مجزا، عموما دارای چندین subdomain هم هست برای افزایش قابلیت توزیع فایل‌ها روی دومین‌های مختلف.

۶) استفاده از دومین بدون Cookie
وقتی شما یه CDN راه‌اندازی کردین، نکته بسیار مهم برای اون دومین(ها) اینه که در تمام اونها شما هیچ گونه cookie تعریف نکنین. به خاطر اینکه کوکی یه حجم (هرچند ناچیزی) به هر کدوم از اون فایل‌ها اضافه می‌کنه که اصولا لزومی برای اینکار وجود نداره و صرفا در درازمدت پهنای باند اون CDN رو بی‌جهت مصرف می‌کنه

۷) مشخص کردن Expire و Cache-Control
وقتی وب‌سرور شما داره به یه ریکوئست جواب می‌ده یه سری اطلاعات رو روی Header صفحه قرار می‌ده که یکی از اونها مشخص کردن وضعیت Expire شدن و Cache شدن محتویات اون صفحه‌س. شما برای افزایش سرعت لود شدن صفحات می‌تونین خیلی از محتویات صفحه رو که در زمان تغییر نمی‌کنن، یا قابلیت cache شدن دارن رو اونجا مشخص کنین. یکی از راه‌های این کار استفاده از mod_expires برای آپاچی‌ه به ترتیب زیر:

ExpiresActive On
ExpiresDefault A604800
ExpiresByType image/x-icon A2592000
ExpiresByType image/gif A2592000
ExpiresByType image/jpg A2592000
ExpiresByType image/jpeg A2592000
ExpiresByType image/png A2592000
ExpiresByType text/css A1209600
ExpiresByType application/x-javascript A1209600

604800 یعنی یک هفته، 2592000 یعنی یک ماه و ...

۸) GZip کردن محتویات
تقریبا تمام براوزرهای جدید این قابلیت را دارن که محتوای Zip شده از وب‌سرور تحویل بگیرن، به صورت داخلی اون رو Unzip کنن و بعد اون رو برای کاربر نمایش بدن. خاصیت استفاده از این کار اینه که به جای اینکه مثلا یه فایل ۱۰۰ کیلوبایتی دانلود بشه، همون فایل با حجم مثلا ۳۰ کیلوبایت دانلود می‌شه که خب اولا هم سریع‌تره هم پهنای باند کمتری از سرورتون مصرف می‌کنه. برای این کار می‌تونین از mod_deflate آپاچی استفاده کنین به این صورت:
SetOutputFilter DEFLATE
BrowserMatch ^Mozilla/4 gzip-only-text/html
BrowserMatch ^Mozilla/4\.0[678] no-gzip
BrowserMatch \bMSIE !no-gzip !gzip-only-text/html
Header append Vary User-Agent

۹) Minify کردن تمام فایل‌ها
وقتی در محیط develop شما مشغول آماده‌سازی وب‌سایت هستید این:
   <div>
      <div>
         Something
      </div>
   </div>

هیچ ایرادی نداره، ولی وقتی شما می‌خواین سایت رو آپلود کنین بهتره که تمام این Spaceها، Tabهای اضافه رو پاک کنین و به این صورت آپلود کنین:
<div><div>Something</div></div>

چون مسلمه که برای یه وب سایت تو محیط Production خوانایی اینقدر مهم نیست که تو محیط Develop. و در نظر بگیرین که این عمل Minify کردن رو برای تمام فایل‌ها مخصوصا css و javascript انجام بدین.

نهایتا برای اطلاعات کامل‌تر، توضیحات رو از راهنمای گوگل و یاهو بخونین و همچنین برای تست کردن وضعیت وب‌سایت‌تون از Add-on های Page Speed و YSlow که برای Firebug طراحی شدن استفاده کنین.

0 comments:

Post a Comment

 
Design by Free WordPress Themes | Bloggerized by Lasantha - Premium Blogger Themes