راهحلهایی برای افزایش و بهبود کارایی وب سایت
راهحلهایی برای افزایش و بهبود کارایی وب سایت
محتویات
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ها
80 درصد response time که کاربر باید صبر کند تا صفحه کامل لود شود، زمانیست که مرورگر متحویات صفحه شامل تصاویر، فایلهای جاوااسکرپیت، css ، فلش و ... را دانلود میکند. پس هر جا که امکان داشت باید این فایلها را ترکیب کرد.
یعنی تمام فایلهای css را با هم ترکیب و به صورت یک فایل آپلود کنید، فایلهای مختلف تصویری را نیز ترکیب و یک Image Sprite آپلود نموده و از طریق attributeهای css آنها را تفکیک کنید.
استفاده نکردن از URL Redirect
استفاده از redirect با تگ Meta موردی است که باعث بالا رفتن زمان ریسپانس میشود. بنابراین شما اگه به هر دلیلی لازم دارید که کاربر را از یک صفحه به صفحه دیگر به صورت اتوماتیک ریدایرکت کنید این عمل را از طریق وب سرور انجام دهید .(mod_rewrite)
Bad Request
تحت هیچ شرایطی به فایل یا آدرسی که وجود ندارد ارجاع نکنید. یعنی شما Error 404 را فقط و فقط باید برای آدرس صفحه داشته باشید (یعنی باید در نظر بگیرید که این 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 برای آپاچی به ترتیب زیر:
<source lang="php">
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
</source>
604800 یعنی یک هفته، 2592000 یعنی یک ماه و ...
GZip کردن محتویات
تقریبا تمام مرورگرهای جدید این قابلیت را دارند که محتوای Zip شده از وب سرور تحویل بگیرند، به صورت داخلی آن را Unzip کرده و بعد آن را برای کاربر نمایش دهند.
خاصیت استفاده از این کار اینست که به جای اینکه مثلا یک فایل ۱۰۰ کیلو بایتی دانلود شود، همان فایل با حجم مثلا ۳۰ کیلو بایت دانلود شده که خب اولا هم سریعتر هست و هم پهنای باند کمتری از سرور مصرف میکند.
برای این کار میتوانید از mod_deflate آپاچی استفاده کنید به این صورت:
<source lang="php">
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
</source>
= Minify کردن تمام فایلها
وقتی در محیط develop شما مشغول آماده سازی وب سایت هستید این:
<source lang="php">
<body>
Something
</body>
</source>
هیچ ایرادی ندارد، ولی وقتی شما قصد دارید سایت را آپلود کنید بهتر است که تمام این Spaceها، Tabهای اضافه را پاک کنید و به این صورت آپلود کنید:
<source lang="php">
<body></source>
چون مسلم است که برای یک وب سایت تو محیط Production خوانایی اینقدر مهم نیست که تو محیط Develop. و در نظر بگیرید که این عمل Minify کردن را برای تمام فایلها مخصوصا css و javascript انجام دهید.
نهایتا برای اطلاعات کاملتر، توضیحات را از راهنمای گوگل و یاهو بخوانید و همچنین برای تست کردن وضعیت وب سایت از Add-on های Page Speed و YSlow که برای Firebug طراحی شدن استفاده کنید.
منبع
سایت داناترین danatarin.com
|
|