چجوری میشه فهمید Yii و نرم افزار تولید شده با آن چقدر از رم و پهنا باند و اشغال میکنه؟
سلام به همه دوستان
من مدتهاست که از Yii برای کارهام استفاده میکنم
اما همیهش مشتری از سرعت سایت من گله منده
با اینکه اکثرا از بوت استرپ استفاده میکنم
و این سری هم رم سرور پر شده بود با اینکه کلا 3 تا سایت فعال رو سرورم دارم
خواستم ببینم از کجا میشه فهمید Yii و اسکریپتم چقدر حافظه و اشغال میکنه و چه نکاتی و باید در نظر گرفت در حین تولید برنامه
نقل قول: چجوری میشه فهمید Yii و نرم افزار تولید شده با آن چقدر از رم و پهنا باند و اشغال میکنه؟
چند تا نکته که تجربیه :
۱ - سعی کنید از Framework ها تا جایی که میشه استفاده نکنید (بله درست نوشتم استفاده نکنید) ، framework ها زمانی مناسب هستند که واقعا به کارایشون نیاز باشه و منابع خوبی هم برای سرباری که ایجاد میکنند وجود داشته باشه و وقتی میشه کار را بدون framework و به راحتی انجام داد واقعا نیاز بهش نیست. (در اینجا منظور هر نوع framework هست چه حالا css و چه php و چه javascript)
۲ - اگه سمت کلاینت دارین از Bootstrap یا Jquery استفاده میکنید حتما سمت سرور از قابلیت Compress کردن یا همون gzip استفاده کنید (وب سرور با یکسری تنظیمات توی htaccess به راحتی انجام میده)
۳ - تا جایی که میشه از میزبانی های Shared معتبر و خوب استفاده کنید و مثلا یک VPS با یکی دو گیگ رم که خودتون هم کانفیگ کردین اصلا استفاده نکنید. میزبان های Shared که Over Sell هم ندارند واقعا منابع خوبی دارندو ۹۰ درصد سایت ها جواب میدهند روی این ها. اگه واقعا قصد استفاده از VPS یا Dedicated دارین یک متخصص مدیریت سیستم استخدام کنید که سرویس را براتون Config کنه و مطمئن باشین یک برنام هنویس وب توی ۹۵ درصد مواقع سواد لازم و کافی برای کانفیگ را نداره !
۴ - وقتی مشتری میگه سرعت پایینه فقط چون اون گفته اینطوریه اهمیتی نداره و واقعا باید بررسی بشه طرف داره با چه شرایطی (سرعت اینترنتش چیه و نکنه داره Dialup کار میکنه ، مرورگرش چیه و نکنه انتظار داره IE6 توی سال 2015 به خوبی navigate و نمایش بده صفحات را) سایت را میبینه.
در آخر موفق باشین.
نقل قول: چجوری میشه فهمید Yii و نرم افزار تولید شده با آن چقدر از رم و پهنا باند و اشغال میکنه؟
توی استفاده از فریمورکها دقت کنید. برای مثال، وقتی فقط به دو فیلد از کل فیلدهای یک جدول نیاز دارین، لازم نیست همه رو انتخاب کنید. مثال:
$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 منتقل کردم.
نقل قول: چجوری میشه فهمید Yii و نرم افزار تولید شده با آن چقدر از رم و پهنا باند و اشغال میکنه؟
نقل قول:
نوشته شده توسط
MMSHFE
همچنین تفاوت این دو کد رو میشه به راحتی فهمید:
// 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 منتقل کردم.
این نرمال و اپتیمایز رو من زیاد متوجه نشدم، یعنی دومی بهتره؟ خوب این مگه هر سری نمی ره سراغ دیتابیس؟ و این خودش مگه باعث افت سرعت نمی شه؟
نقل قول: چجوری میشه فهمید Yii و نرم افزار تولید شده با آن چقدر از رم و پهنا باند و اشغال میکنه؟
نه هر سری نمیره. توی foreach قسمت اول (تولید آرایه) همون دفعه اول اجرا میشه نه هربار. تفاوتشون در اینه که اولی همه کامنتهای یک پست رو در میاره و پیمایش میکنه و اگه تأیید شده بود، کارها رو انجام میده ولی دومی همون اول فقط کامنتهای تأیید شده رو استخراج میکنه و اصلاً تأیید نشده ها رو توی RAM نمیاره.
نقل قول: چجوری میشه فهمید Yii و نرم افزار تولید شده با آن چقدر از رم و پهنا باند و اشغال میکنه؟
البته یک راه دیگه هم هست که میشه سادگی 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
}
}
نقل قول: چجوری میشه فهمید Yii و نرم افزار تولید شده با آن چقدر از رم و پهنا باند و اشغال میکنه؟
من به تست جالبی رسیتم
روی هاستهای اشتراکی که شرکتها ارائه میدن (چند شرکتی رو که تست کردم اسمشو بگم تبلیغ میشه اما اولش نت داره آخرش افراز :) مثلا !!!)
با توجه به کانفیگی که ارائه کرده اند روی پی اچ پی 5.3 Yii حداقل ده مگ مصرف رم داره در هر پروسس
روی سرور خودم php5.5 با apc به ندرت به سه مگ میرسه و معمولا روی دو مگ هست اکثرا مواقع :)
نقل قول: چجوری میشه فهمید Yii و نرم افزار تولید شده با آن چقدر از رم و پهنا باند و اشغال میکنه؟
روی هاست های اشترکی من مصرف رم را اندازه گرفتم در حالت عادی که تو اون صفحه هیچ query اجرا نمی شد مصرف رم ۵ مگابایت بود ولی تو سرور با php 5.6 تست گرفتم صفحه هایی که کلی توش query و realtion زده بودم به 3.5 یا 4 میرسید
نقل قول: چجوری میشه فهمید Yii و نرم افزار تولید شده با آن چقدر از رم و پهنا باند و اشغال میکنه؟
ممنون از پاسخ دوستان
من هم معتقدم که استفاده از سرور اشتراکی تو خیلی از شرایط بهتر از سرور های vps یا delicated هست
پلان رم یک گیگ و پهنا باند 100 گیگ داشتم کلا آپاچی کراش کرده بوده و اصلا ران نمیشد سرور
میگه خود دایرکت ادمین و الحاقات اون نزدیک به 400 مگابایت از رم و اشغال میکنه.
مشتری هم انتظار کیفیت داره اما پولو به نرخی پرداخت میکنه که همه میدند
مثلا یک سایت خبری ساده هم یه پول میده یک سیت فروشگاهی پربازدید که تو لاگ های سرور بیشتری پهنا باند و غیره و مصرف میکنه هم همون انتظار و داره
و در مورد کانفیگ کردن توسط متخصص هم من با uniq موافقم
در مورد استفاده نکردن از فریمورک های سمت سرور هم : باید گفت که یک عادت و سبکی به وجود میاد و یک ارشیو و بدنه اولیه که ادم همیشه تو اکثر پروژه هاش همون و مبنا میکنه و ادامه کار میده و سرعت کار ادم خیلی میره بالا
امکانات ام وی سی و اکتیو رکورد و غیره و نمیشه ادم با کلاس نویسی و کوئری زدن تو کد ها دوباره ادم تغییر عادت بده
من بازم دوست دارم دلایل و راه کارهای بهتری ارائه بدین
نقل قول: چجوری میشه فهمید Yii و نرم افزار تولید شده با آن چقدر از رم و پهنا باند و اشغال میکنه؟
در مورد gzip هم یه مطلب خوب بدید ممنون میشم
http://www.feedthebot.com/tools/gzip/
اینجا بررسی میکنم درصد های بالایی میده مثلا 90 درصد به بالا میگه سرعت بهتر میشه اما کد های مختلفی تو نت هست یه توضیح یا لینکه خوب بدید ممنون میشم
مثلا زیپ فیلم خوبه یا بده
زیپ عکس ها خوبه یا بده
زیپ عکس های اسلایدر ها یا همه عکس ها
عکس محصولات یا همه
یه همچنین توضیحاتی
نقل قول: چجوری میشه فهمید Yii و نرم افزار تولید شده با آن چقدر از رم و پهنا باند و اشغال میکنه؟
سرعت فاکتورهای زیادی داره، مخصوصا در زمینه وب خیلی چیزها باید بهینه بشه.
کدهات رو دوباره چک کن، دیتابس رو اینکس گذاری کن، از کش داخلی استفاده کن، حد الامکان از کش APC استفاده کن. تو کانفیق Htaccess به آیتم های استاتیک تاریخ مصرف بزار ... و حتما بچرخ سمت Yii2
نقل قول: چجوری میشه فهمید Yii و نرم افزار تولید شده با آن چقدر از رم و پهنا باند و اشغال میکنه؟
برای gzip کافیه اول index.php این کد رو بگذارین:
ob_start('ob_gzhandler');
آخرش هم همون ;()ob_end_flush کافیه. توی اکثر هاستها gzip فعاله و همین کار کافیه و لازم نیست درگیر htaccess. بشین. اما اگه میخواین عکسها هم با gzip فشرده بشن باید با htaccess. تنظیمش کنید. من خودم با این کار یک صفحه رو که با عکسها و مشتقاتش 1.9 مگابایت بود، رسوندم به 310 کیلوبایت و حجم سورس صفحه از 310 کیلوبایت رسید به 4.7 کیلوبایت!
اکیداً توصیه میکنم از امکانات متنوع کش در Yii استفاده کنید.
نقل قول: چجوری میشه فهمید Yii و نرم افزار تولید شده با آن چقدر از رم و پهنا باند و اشغال میکنه؟
مهرداد کلا آپاچی روی تعداد رکوئست بالا مشکل ایجاد میکنه .
به جاش از nignx + php-fpm استفاده کن
من روی وبشمار ثانیه ای 5 رکورد توی دیتابیس ذخیره میشه دیگه خودت تصور کن چقدر درخواست دارم
مصرف رمم 600 مگ هست :)