smart
6 سال پیش توسط smart مطرح شد
10 پاسخ

سرعت و کارایی وبسایت

سلام دوستان. وقت بخیر. فکر کنم همه با وبسایت و اپ دیوار کار کرده باشن. اگه دقت کرده باشین سرعت اجرای دستورات و واکشی اطلاعات خیلی خیلی سریعه. مثلا بخش ******** یا نمایش آگهی ها با اینکه تعداد آگهی ها فوق العاده زیاده، خیلی سریعه و انگار در لحظه انجام میشه. خواستم ببینم از الگوریتم ها و روش های خاصی استفاده میکنن یا مربوط به زبان برنامه نویسی هست یا مربوط به دیتابیس یا سرور هست؟ بطور کلی میخواستم بدونم اگه بخوام یه وبسایت و api بنویسم چیا رو باید رعایت کنم تا با حجم بالای دیتابیس و کاربرای چند میلیونی بتونم همچین سرعتی رو فراهم کنم ؟


ثبت پرسش جدید
علی بیات
تخصص : توسعه دهنده ارشد وب
@ali.bayat 6 سال پیش آپدیت شد
2

اولین چزی که باید در نظز بگیرید تعداد کاربران و تعداد درخواست‌های ارسالی در هر ثانیه به سمت سرور هست. اگر درخواست های شما زیاده٬ میشه از متد non-blocking استفاده کرد که در پلتفرم Nodejs پیاده سازی شده. و زبان Go هم گزینه بسیار عالی هست. اما چنانچه درخواست‌های ارسالی در هر ثانیه خیلی بالا نیست لاراول و لومن بهترین گزینه هستند.
موفق باشید


smart
@smartgarden2016 6 سال پیش مطرح شد
1

ممنونم از جوابتون.
حالا تعداد کاربر در حد چند میلیون نه ولی فرض کنید مثلا در حد یکی دو میلیون باشه. آیا لاراول مناسبه ؟ و اگر آره چه مواردی باید رعایت بشه ؟ مثلا نوع طراحی دیتابیس یا هر مورد دیگه ای ؟ اگر یه سری رفرنس و مقاله بتونین معرفی کنین خوبه. منظورم هر چیزی هست که بشه ازش اطلاعات گرفت.


Alimotreb
تخصص : کانفیگ سرور و برنامه نویس
@Alimotreb 6 سال پیش مطرح شد
1

سلام
@smartgarden2016

بله که مناسب هست!
فقط باید منابع سخت افزاری هم به میزان همون مقدار بازدید کننده بالا باشه
سی پی یو قوی ، رم قوی و هارد اس اس دی!


Arash Moradi
@arash.moradi89 6 سال پیش مطرح شد
1

همیشه وقتی صحبت از تعداد درخواست های بالا میشه میگن Nodejs در صورتی که ما وبسایت های می بینم با لاراول و PHP که تعداد درخواست ها بالا را بدون مشکل اجرا می کنن مثل : اسنپ و الوپیک و.. نمونه خارجی هم زیا داریم

به نظر بنده پاسخگویی در تعداد درخواست بالا مشکلی بود که در نسخه های قدیمی PHP بود و حالا نداریم و در مورد real-time نمی یشه این حرف زد Nodejs بهترین گزینه هست

به نوع برنامه نویسی خیلی بستگی داره شما می تونید یک درخواست تو دیتابیس ذخیره کنید و بعد گرفته بشه و بعد پاسخ داده بشه که این کار منابع زیادی میکشه ولی می تونید اون درخواست به صورت یک فایل JSON ارسال کنید


علی بیات
تخصص : توسعه دهنده ارشد وب
@ali.bayat 6 سال پیش مطرح شد
1

@smartgarden2016
بله php در این مورد کاملا جوابگو هست.
اگر php چنین توانایی رو نداشت، دیجی‌کالا زبان بک اندش رو از nodeJS به php تغییر نمیداد. (چند ماه پیش این کارو انجام دادند)


سید محمد حسین موسوی
تخصص : FullStack Developer
@SeyedMH.Mosavi 6 سال پیش مطرح شد
1

نمی شه یک فاکتور رو در نظر گرفت و مطمئنا عوامل زیادی تو سرعت وب سایت تاثیر دارند.
استفاده از سرور داخلی و CDN ها داخلی
استفاده از سرور با کانفیگ مناسب
و یه سری مباحث دیگه که نرم افزاری نیستند و یه سری موارد دیگه مثل
استفاده از دیتابیس مناسب و نحوه ذخیره سازی و بهینه سازییش. معمولا شرکت های بزرگ از چندین DB Engine مختلف برای کارهای مختلف استفاده می کنند و حتی اگر از یه DB Engine خاص استفاده بکنند بعضی مواقع برای پیاده سازی کاری که می خوانند بکنند از چندین دیتابیس استفاده می کنند. مثلا یه دیتابیس فقظ وظیفه Read داره و یه دیتابیس فقط وظیفه write داره و همیشه هم با هم sync هستند.
از سرور های مختلف استفاده می کنند و مثلا یه سرور مختص احراز هویت و یه سرور مختص یه کار دیگه تا فشار کمتری به سرور اصلی بیاد
از زبان برنامه نویسی مناسب و الگوهای طراحی و کدنویسی درست استفاده می کنند. تا یه حدودی شما اگر کدنویسی درست و مناسبی در حد یه برنامه نویس متوسط داشته باشی می تونی سرعت خوب و قابل قبولی داشته باشی.
مثلا ما تو یه پروژه که سرعت نمایش داده ها از سمت سرور بعضا تا بالای 1 دقیقه هم می رسید. دیتای کمی هم نداشت و دیتابیسش هم بشدت بهم ریخته بود. با تغییر کدهای برنامه نویسی و همون دیتابیس و همون سرور و ... تونستیم سرعت اجرا رو تا چند صد میلی ثانیه هم کاهش بدیم.
اگر کدنویسی شما اصولی باشه با دیتابیس SQL Lite هم می تونی سرعت خوبی داشته باشی کما اینکه ما برای یه پروژه فروشگاهی بزرگ هم باهاش کار کردیم و دیتا رو بنا به دلایلی روی این دیتابیس داشتیم و سرعت بسیار خوبی هم داشتیم.

خلاصه عرض کنم فاکتورهای زیادی وجود داره. اینطوری نیست که شما برای هر پروژه ای فکر کنی مثلا اگر سراغ NodeJs بری سرعت خوبی ازش خواهی گرفت پس همه پروژه ها رو باید باهاش انجام داد. اگر اینطوریه پس چرا سایتی مثل stackoverflow داره از زبان برنامه نویسی C# و تکنولوژی ASP.NET و دیتابیس SQL Server استفاده می کنه؟
البته این ربطی به این نداره که فقط این سایت ها رو می شه با ASP زد و PHP نمی تونه بلکه اون تیم یه ابزاری رو انتخاب کرده و درست ازش استفاده کرده و تو این مقیاس داره ازش به بهترین نحو استفاده می بره. اگر همون تیم php یا هر چیزه دیگه ای هم داشتند بازهم با همین کیفیت خروجی رو بیرون می دادن چون از ابزارها دارند درست استفاده می کنند.


smart
@smartgarden2016 6 سال پیش مطرح شد
1

@ali.bayat
@Alimotreb
@arash.moradi89
@SeyedMH.Mosavi

ممنونم از همگی بابت جواب. پس میشه گفت با بیشتر زبان ها میشه یه سرعت و کارایی خوب داشت اونم واسه وبسایت های بزرگ.
سوالی که برام پیش اومده اینه که توی یه زبانی مثل لاراول توی کدزنی باید یه چه مواردی رو رعایت کرد که سرعت قابل قبول نه، سرعت عالی داشته باشیم؟
به عنوان مثال من دارم لاراول کار میکنم و خب تا الان چندتا پروژه نمیشه سنگین رو هم اجرا کردم از جمله وبسایت فریلنسینگ و فروشگاه با تمام امکاناتش. آموزش ها رو هم سعی کردم از جاهایی مثل لاراکست ببینم. ولی خب الان نمیدونم آیا کدهایی که نوشتم اون کارایی لازم رو داره یا نه چون هنوز به اون تعداد کاربر و دیتا نرسیدیم.

یه موردی که میدونم اگر رعایت بشه باعث افزایش کارایی و سرعت میشه استفاده از eager loading هست. کلا چه مواردی مثل این مورد یه به هر شکل دیگه ای وجود داره که اگر رعایت کنیم میتونیم مطمئن باشیم کدهامون کارایی خیلی خوبی دارن و با تعداد کاربر بالا و دیتای زیاد شاهد افت کیفیت و کارایی و سرعت نمیشیم؟

آقای موسوی مثلا شما میتونید مثال بزنید که چه تغییراتی رو ایجاد کردین که باعث افزایش کارایی به این شکل شد؟ صرفا همین استانداردهای کدنویسی که توی آموزش ها هست رو رعایت کردین یا اینکه از روش های دیگه ای استفاده کردین؟ در حد یه راهنمایی باشه عالی میشه. ممنون


سید محمد حسین موسوی
تخصص : FullStack Developer
@SeyedMH.Mosavi 6 سال پیش مطرح شد
1

این نکته درسته که با همه ابزارها و زبان ها می شه درست کار کرد ولی یه نکته هم باید در نظر بگیرید که یه سری از این زبان ها و ابزارها نقات قوت و ضعفی دارند که باید در نظر بگیرید. به فرض برای کارهای realtime بهترین گزینه nodejs هست و این کار رو می تونید با ابزارها و زبان های دیگه هم جلو ببرید ولی در یه سری موارد خاص نمی تونید بهترین کارایی رو بگیرید.

ابزارهایی وجود دارند که می تونید باهاش سایت رو زیر فشار ببرید و تست کنید که چطوری کار می کنه. یا ابزارهایی که بهتون نشون می ده کد شما داره چطوری کار می کنه. مثلا وقتی کوئری می زنید چطوری اجرا می شه. این ابزارها هم در سطح برنامه نویسی و هم دیتابیس وجود دارند.
من چون کلا با php کار نکردم نمی تونم نظری بدم و ابزار یا روش خاصی رو توصیه کنم و کلی عرض می کنم.
اما اینکه تو پروژه ما چیکار کردیم. چنتا از کارهایی که بنده انجام دادم این بود که پروژه رو از Database Firts به CodeFirst بردم و ORM پروژه رو تغییر دادم و یه سری کوئری ها رو بازنویسی کردم ...
مهم ترین دلیل کندی پروژه کوئری های بهینه نشده بود و بازنویسی شد و چون توضیحش زیاده و از حوصله خارجه دیگه ذکر نمی کنم.


علی بیات
تخصص : توسعه دهنده ارشد وب
@ali.bayat 6 سال پیش مطرح شد
1

@smartgarden2016
موارد زیادی روی پرفرمنس لاراول اثر میگذاره.

  • منابع سرور
  • استفاده از Cache . هر جا که میتونید ازش استفاده کنید و این باعث میشه تعداد کوئری‌های SQL کم بشن.
  • برای کش اطلاعات از Redis یا سیستمی مشابه استفاده کنید.
  • در مایگریشن‌ها و جداول بانک داده index ها رو بدرستی کار کنید.
  • استفاده از PHP OPcache . که در سرعت کار بسیار اثر میگذاره.

smart
@smartgarden2016 6 سال پیش مطرح شد
1

ممنونم از همه دوستان. لطف کردین.


برای ارسال پاسخ لازم است وارد شده یا ثبت‌نام کنید

ورود یا ثبت‌نام