ورود

View Full Version : چجوری میشه فهمید Yii و نرم افزار تولید شده با آن چقدر از رم و پهنا باند و اشغال میکنه؟



$ M 3 H R D A D $
پنج شنبه 21 اسفند 1393, 10:54 صبح
سلام به همه دوستان
من مدتهاست که از Yii برای کارهام استفاده میکنم
اما همیهش مشتری از سرعت سایت من گله منده
با اینکه اکثرا از بوت استرپ استفاده میکنم
و این سری هم رم سرور پر شده بود با اینکه کلا 3 تا سایت فعال رو سرورم دارم
خواستم ببینم از کجا میشه فهمید Yii و اسکریپتم چقدر حافظه و اشغال میکنه و چه نکاتی و باید در نظر گرفت در حین تولید برنامه

Unique
پنج شنبه 21 اسفند 1393, 13:56 عصر
چند تا نکته که تجربیه :

۱ - سعی کنید از Framework ها تا جایی که میشه استفاده نکنید (بله درست نوشتم استفاده نکنید) ، framework ها زمانی مناسب هستند که واقعا به کارایشون نیاز باشه و منابع خوبی هم برای سرباری که ایجاد میکنند وجود داشته باشه و وقتی میشه کار را بدون framework و به راحتی انجام داد واقعا نیاز بهش نیست. (در اینجا منظور هر نوع framework هست چه حالا css و چه php و چه javascript)

۲ - اگه سمت کلاینت دارین از Bootstrap یا Jquery استفاده میکنید حتما سمت سرور از قابلیت Compress کردن یا همون gzip استفاده کنید (وب سرور با یکسری تنظیمات توی htaccess به راحتی انجام میده)

۳ - تا جایی که میشه از میزبانی های Shared معتبر و خوب استفاده کنید و مثلا یک VPS با یکی دو گیگ رم که خودتون هم کانفیگ کردین اصلا استفاده نکنید. میزبان های Shared که Over Sell هم ندارند واقعا منابع خوبی دارندو ۹۰ درصد سایت ها جواب میدهند روی این ها. اگه واقعا قصد استفاده از VPS یا Dedicated دارین یک متخصص مدیریت سیستم استخدام کنید که سرویس را براتون Config کنه و مطمئن باشین یک برنام هنویس وب توی ۹۵ درصد مواقع سواد لازم و کافی برای کانفیگ را نداره !

۴ - وقتی مشتری میگه سرعت پایینه فقط چون اون گفته اینطوریه اهمیتی نداره و واقعا باید بررسی بشه طرف داره با چه شرایطی (سرعت اینترنتش چیه و نکنه داره Dialup کار میکنه ، مرورگرش چیه و نکنه انتظار داره IE6 توی سال 2015 به خوبی navigate و نمایش بده صفحات را) سایت را میبینه.

در آخر موفق باشین.

MMSHFE
پنج شنبه 21 اسفند 1393, 23:41 عصر
توی استفاده از فریمورکها دقت کنید. برای مثال، وقتی فقط به دو فیلد از کل فیلدهای یک جدول نیاز دارین، لازم نیست همه رو انتخاب کنید. مثال:

$models = Posts::model()->findAll(array('select'=>'title,abstract'));
همچنین تفاوت این دو کد رو میشه به راحتی فهمید:

// normal usage
foreach($post->comments as $comment) {
if($comment->confirmed) {
// ...
}
}
// optimized usage
foreach(Comments::model()->findAll('post_id=:pid AND confirmed=1',array(':pid'=>$post->id)) as $comment) {
// ...
}
موارد بهینه سازی این مدلی توی کار با ActiveRecord خیلی زیاده. همینطوری نمیشه کد رو نوشت و مشکل رو بندازیم گردن فریمورک. ضمناً تاپیک رو به بخش Yii منتقل کردم.

desatir7316
پنج شنبه 21 اسفند 1393, 23:48 عصر
همچنین تفاوت این دو کد رو میشه به راحتی فهمید:

// normal usage
foreach($post->comments as $comment) {
if($comment->confirmed) {
// ...
}
}
// optimized usage
foreach(Comments::model()->findAll('post_id=:pid AND confirmed=1',array(':pid'=>$post->id)) as $comment) {
// ...
}
موارد بهینه سازی این مدلی توی کار با ActiveRecord خیلی زیاده. همینطوری نمیشه کد رو نوشت و مشکل رو بندازیم گردن فریمورک. ضمناً تاپیک رو به بخش Yii منتقل کردم.
این نرمال و اپتیمایز رو من زیاد متوجه نشدم، یعنی دومی بهتره؟ خوب این مگه هر سری نمی ره سراغ دیتابیس؟ و این خودش مگه باعث افت سرعت نمی شه؟

MMSHFE
پنج شنبه 21 اسفند 1393, 23:55 عصر
نه هر سری نمیره. توی foreach قسمت اول (تولید آرایه) همون دفعه اول اجرا میشه نه هربار. تفاوتشون در اینه که اولی همه کامنتهای یک پست رو در میاره و پیمایش میکنه و اگه تأیید شده بود، کارها رو انجام میده ولی دومی همون اول فقط کامنتهای تأیید شده رو استخراج میکنه و اصلاً تأیید نشده ها رو توی RAM نمیاره.

MMSHFE
جمعه 22 اسفند 1393, 00:10 صبح
البته یک راه دیگه هم هست که میشه سادگی Relational AR و بهینگی رو با هم داشته باشیم:

$posts = Posts::model()->with(array(
'comments'=>array(
'condition'=>'comments.confirmed=1',
))->findAll('t.confirmed=1');
foreach($posts as $post) {
// we have confirmed posts here
foreach($post->comments as $comment) {
// we have confirmed comments of current post here
}
}

rezaonline.net
جمعه 22 اسفند 1393, 08:28 صبح
من به تست جالبی رسیتم
روی هاستهای اشتراکی که شرکتها ارائه میدن (چند شرکتی رو که تست کردم اسمشو بگم تبلیغ میشه اما اولش نت داره آخرش افراز :) مثلا !!!)
با توجه به کانفیگی که ارائه کرده اند روی پی اچ پی 5.3 Yii حداقل ده مگ مصرف رم داره در هر پروسس
روی سرور خودم php5.5 با apc به ندرت به سه مگ میرسه و معمولا روی دو مگ هست اکثرا مواقع :)

engmmrj
جمعه 22 اسفند 1393, 10:10 صبح
روی هاست های اشترکی من مصرف رم را اندازه گرفتم در حالت عادی که تو اون صفحه هیچ query اجرا نمی شد مصرف رم ۵ مگابایت بود ولی تو سرور با php 5.6 تست گرفتم صفحه هایی که کلی توش query و realtion زده بودم به 3.5 یا 4 میرسید

$ M 3 H R D A D $
جمعه 22 اسفند 1393, 10:37 صبح
ممنون از پاسخ دوستان
من هم معتقدم که استفاده از سرور اشتراکی تو خیلی از شرایط بهتر از سرور های vps یا delicated هست
پلان رم یک گیگ و پهنا باند 100 گیگ داشتم کلا آپاچی کراش کرده بوده و اصلا ران نمیشد سرور
میگه خود دایرکت ادمین و الحاقات اون نزدیک به 400 مگابایت از رم و اشغال میکنه.

مشتری هم انتظار کیفیت داره اما پولو به نرخی پرداخت میکنه که همه میدند
مثلا یک سایت خبری ساده هم یه پول میده یک سیت فروشگاهی پربازدید که تو لاگ های سرور بیشتری پهنا باند و غیره و مصرف میکنه هم همون انتظار و داره

و در مورد کانفیگ کردن توسط متخصص هم من با uniq موافقم

در مورد استفاده نکردن از فریمورک های سمت سرور هم : باید گفت که یک عادت و سبکی به وجود میاد و یک ارشیو و بدنه اولیه که ادم همیشه تو اکثر پروژه هاش همون و مبنا میکنه و ادامه کار میده و سرعت کار ادم خیلی میره بالا
امکانات ام وی سی و اکتیو رکورد و غیره و نمیشه ادم با کلاس نویسی و کوئری زدن تو کد ها دوباره ادم تغییر عادت بده

من بازم دوست دارم دلایل و راه کارهای بهتری ارائه بدین

$ M 3 H R D A D $
جمعه 22 اسفند 1393, 11:14 صبح
در مورد gzip هم یه مطلب خوب بدید ممنون میشم
http://www.feedthebot.com/tools/gzip/
اینجا بررسی میکنم درصد های بالایی میده مثلا 90 درصد به بالا میگه سرعت بهتر میشه اما کد های مختلفی تو نت هست یه توضیح یا لینکه خوب بدید ممنون میشم
مثلا زیپ فیلم خوبه یا بده
زیپ عکس ها خوبه یا بده
زیپ عکس های اسلایدر ها یا همه عکس ها
عکس محصولات یا همه
یه همچنین توضیحاتی

jafaripur
جمعه 22 اسفند 1393, 12:27 عصر
سرعت فاکتورهای زیادی داره، مخصوصا در زمینه وب خیلی چیزها باید بهینه بشه.
کدهات رو دوباره چک کن، دیتابس رو اینکس گذاری کن، از کش داخلی استفاده کن، حد الامکان از کش APC استفاده کن. تو کانفیق Htaccess به آیتم های استاتیک تاریخ مصرف بزار ... و حتما بچرخ سمت Yii2

MMSHFE
جمعه 22 اسفند 1393, 12:43 عصر
برای gzip کافیه اول index.php این کد رو بگذارین:

ob_start('ob_gzhandler');
آخرش هم همون ;()ob_end_flush کافیه. توی اکثر هاستها gzip فعاله و همین کار کافیه و لازم نیست درگیر htaccess. بشین. اما اگه میخواین عکسها هم با gzip فشرده بشن باید با htaccess. تنظیمش کنید. من خودم با این کار یک صفحه رو که با عکسها و مشتقاتش 1.9 مگابایت بود، رسوندم به 310 کیلوبایت و حجم سورس صفحه از 310 کیلوبایت رسید به 4.7 کیلوبایت!

اکیداً توصیه میکنم از امکانات متنوع کش در Yii استفاده کنید.

rezaonline.net
جمعه 22 اسفند 1393, 14:43 عصر
مهرداد کلا آپاچی روی تعداد رکوئست بالا مشکل ایجاد میکنه .
به جاش از nignx + php-fpm استفاده کن
من روی وبشمار ثانیه ای 5 رکورد توی دیتابیس ذخیره میشه دیگه خودت تصور کن چقدر درخواست دارم
مصرف رمم 600 مگ هست :)