php برای پروژه های بزرگ مناسب هست؟
یعنی از جنگو و nodejs برای پروژه های بزرگ بهتره؟
میخوام خیال شما رو راحت کنم و چیزی رو به شما بگم که در ادامه تصمیم گیری شما رو راحت تر می کنه.
در کل وقتی که یک برنامه نوشته میشه باید اجرا (run) بشه منظور دقیقتر از اجرا شدن یعنی این که باید کد های متنی تبدیل به آبجکت های اجرایی بشه و این آبجکت ها داخل رم بارگذاری بشن و زمانی که نیاز شد پردازنده کامپیوتر از اون آبجکت ها استفاده کنه و کاری که شما میخوای رو انجام بده.
حالا در زبان های مفسری مثل php,python,javascript این کار رو مفسر های این زبان به وسیله اسمبلر خودشون انجام میدن. کد های متنی رو برمیدارن و کامپایل می کنن به صورت آبجکت اجرایی به رم می فرستن و ... یعنی هر باری که شما برنامه رو از اول اجرا می کنید این اتفاق می افته.
1-
برنامه ای که برای سرور نوشته میشه شاید نیاز باشه که سال ها در حال اجرا بمونه (سال ها داخل رم در حال اجرا باشه) و در هر زمانی به درخواست های کاربران پاسخ بده.
برای همین شما با هر زبانی که برنامه سمت سرور رو بنویسید باید اول به مرحله run شدن برسه و در اون حالت ثابت بمونه و از پورت های سیستم عامل درخواست ها رو تحویل بگیره ( اگه بخوایم به صورت ساده تر بگیم برنامه شما یک سرور نرم افزاری تشکیل میده ).
پس کاملا ساده و مشخصه که اگه برنامه شما به هر دلیلی از حالت اجرا خارج بشه و خاموش بشه طبیعتا نمی تونه به درخواست پاسخ بده .. (برنامه ای وجود نداره که سیستم عامل درخوست ها رو به سمت اون بفرسته)
2-
یک مشکلی که همیشه برای نرم افزار های سمت سرور وجود داره اینه که اگه تعداد درخواست هایی که به سمت اون نرم افزار فرستاده میشه بیشتر از پیشبینی ما بشه، برنامه ما رم و سیپییو بیشتری مصرف می کنه و اگه این به بالاتر از حد مجاز خودش برسه ممکنه برنامه متوقف و خاموش بشه، وقتی که خاموش بشه حتی اگه تعداد درخواست ها هم کمتر بشه باز فایده ای نداره و دیگه برنامه ای برای پاسخگویی در حال اجرا نیست.
برای این حل این مشکل راه های زیادی هست.
3- یکی از راه هایی که برای رفع این مشکل وجود داره اینه که ما برنامه رو طوری بنویسیم که با هر درخواست برای همون درخواست اجرا بشه و کار اون درخواست رو انجام بده و خاموش بشه (یعنی برای هر درخواست یک اینستنس از برنامه به صورت جداگانه اجرا بشه) و زمانی که درخواست وجود نداره هیچ برنامه ای در حال اجرا نباشه.
مزیت این کار اینه که برنامه سمت سرور ما هر باری که به هر دلیلی خاموش بشه (کارش تموم بشه یا کرش کنه) میتونه برای درخواست بعدی از اول اجرا بشه.
حالا سوالی که پیش میاد اینه که اگه برنامه ای درحال اجرا نباشه از کجا بفهمیم که کاربر درخواستی رو ارسال کرده و برنامه سمت سرور روشن بشه و به اون پاسخ بده و خاموش بشه؟ نرم افزار هایی مثل apache httpd و nginx و ... که بهشون وبسرور گفته میشه یکی از قابلیت های که دارن همینه .. یعنی در حال اجرا و منتظر درخواست ها می مونن و وقتی درخواستی اومد برنامه سمت سرور ما رو اجرا می کنن و درخواست کاربر رو بهش میدن و جوابش رو پس می گیرن و دوباره برای کاربر می فرستن. مزیت استفاده از وبسرور جداگانه مثلا apache اینه که خیلی سبک اجرا میشن و میتونن حجم درخواست های بیشتر از انتظار رو کنترل کنن و خاموش نشن و بعد از رفع شدن مشکل دوباره کارشون رو ادامه بدن
این 3 مورد رو گفتم نکته اصلی رو بگم:
نکته اصلی اینه که اگه برنامه بخواد برای هر کاربر جداگانه اجرا بشه چه مشکلی پیش میاد؟
شما یک برنامه ی نوشته شده با با جاوا اسکریپت رو درنظر بگیرید که حجم کدهاش (با توجه به دیپیندنسی ها) حدود 200 الی 400 مگ هست .. شما روی یک کامپیوتر قوی میخوای اجراش کنی حدود 2 الی 10 ثانیه طول می کشه .. موقع تفسیر شده به آبجکت اجرای کلی رم سیپییو میخوره ... به همین ترتیب شما حساب مکن که روی سرور و با توجه به حجم بالای درخواست ها اصلا به صرفه نیست برای هر درخواست یک بار اجرا بشه.
ولی از اینطرف شما وردپرس رو هم در نظر بگیر که حجمش(حجم بعد از نصب , نصب پلاگین ها ..) حدودا همون مقداره.
ولی زمان مورد نیاز برای تفسیر شدنش به آبجکت اجرایی در حدود صدم ثانیه هست و php باری این حجم از کد اندازه nodejs و python رم و سیپییو مصرف نمی کنه.
یعنی این ایده ای که برنامه هر بار برای هر درخواست، جداگانه اجرا بشه رو php به خوبی می تونه به اجرا در بیاره.
و اکثر تنظیمات سرور ها برای اجرا کردن کد های php روی همین حالت اجرای جداگانه برای هر درخواست هست.
-این که از خیلی از اساتید شنیدید که php نمیتونه فلان کار رو بکنه (مثلا ارتباط سوکت) درست نیست، علتش اینه که خیلی از برنامه نویس هایی که سال ها با php کار کردن عادت کردن برنامه های php رو به همین صورت اجرا کنن(از lamp یا wamp استفاده می کنن که برای استفاده php در این حالت ساخته شده) و از این موضوع بی اطلاع هستن که برنامه نوشته شده با php هم میتونه مثل بقیه زبان ها همیشه درحال اجرا بمونه و حتی فریمورک های قوی و سبک و سریعی هم وجود دارن که php رو درحالت عادی (همیشه درحال اجرا بودن) اجرا می کنن مثل فریمورک swoole.
- من اصلا طرفدار php نیستم و نمیخوام php رو قوی تر جلوه بدم و بیشتر به فریمور هایی مثل Rocket(زبان rust) و Cutelyst(زبان cpp) علاقه دارم و ازشون طرفداری می کنم 😁😁😅 ولی به خاطر قابلیت های اینچنینی و سایر قابلیت هایی که php داره .. خیلی از مواقع مجبور به انتخاب php میشم.
در کل به بزرگی پروژه ربطی نداره، چون معلوم نیست منظور از پروژه بزرگ چیه و چه کسی به چی میگه بزرگ
ممکنه منظور از بزرگ بودن تعداد کاربر های پروژه باشه، ممکنه منظور از بزرگی سختی مدیریت کل مجموعه باشه و ربطی که برنامه نویسی نداشته باشه، ممکنه منظور از بزرگی طولانی بودن زمان مورد نیاز برای برنامه نویسی باشه و ربطی به متعدد بودن تکنولوژی های مورد نیاز نداشته باشه.
بستگی به این داره که شما تصمیم داشته باشی ساختار برنامه شما چطور باشه
پس بهتره شما بیشتر روی این که قراره چه جور برنامه هایی رو بنویسید تمرکز کنید و این روش ها رو با هم مقایسه کنید
@manish
سلام. میبینم که شما خیلی درگیر انتخاب هستید. به نظر من وقت بیش از این هدر ندید و یکی از زبان های دلخواه رو انتخاب کنید و ادامه بدید. تا زمانی که شروع بکنید نه تفاوت ها رو متوجه میشید نه پیشرفتی خواهید داشت.
انتقاد: طی یکی دو هفته اخیر تمامی مطالبی که توسط شما به ثبت رسیده عینا یکسان و مقایسه بوده. اگر نتونید سرچ مناسب انجام بدید و یا از مطالب موجود نتیجه گیری کنید متاسفانه باید بگم در ادامه راه برنامه نویسی به شدت دچار مشکل خواهید شد.
در هر صورت فقط به منظور راهنمایی و اینکه از این وسواس فکری خارج بشید این کامنت رو درج کردم.
امیدوارم موفق باشید و بزودی سوالات تخصصی تر راجب زبانی که انتخاب کردید بپرسید و در مقایسه زبانها باهم دیگه متوقف نشده باشید 😉
آیا مایل به ارسال نوتیفیکیشن و اخبار از طرف راکت هستید ؟