قبل از اینکه به مقایسه Node.js و PHP بپردازیم در مرحله اول باید بفهمیم که چرا یک همچین مقوله ای در بین جوامع برنامه نویس به وجود آمده است مخصوصا در بین برنامه نویس های backend همه این بحث ها بر سر استفاده از php و یا Node.js از افزایش تقاضای کاربران برای استفاده از برنامه های گوشی های هوشمند آغاز شد.
به طوری که apple store شرکت اپل دربرگیرنده ۲ میلیون برنامه و play store شرکت Google دربرگیرنده بیش از ۲٫۲ میلیون برنامه می باشند. موفقیت بسیاری از این برنامه ها، بازی ها و مسنجرها باعث شده است که برنامه نویسان php backend مجبور شوند خود را با جدیدترین تکنولوژی که بتواند درخواست های همزمان را بهتر مدیریت کند انطباق دهند.میلیون ها نفر از کاربران این برنامه ها اقدام به مبادله نوعی از این داده ها می کنند به همین دلیل پردازش این حجم وسیع از داده نیازمند یک زیرساخت قوی و مقیاس پذیر و سریع هست .
با یادگیری زبان ماشین و داده های بزرگ (Big-data) که به سرع در حال پیشرفت و توسعه هستند .می توانیم خود به سرعت در این مسیر قرار دهیم و شطح خود را به سطوح بالاتر و جدیدتر ارتقاء دهیم.
پیش درآمدی بر مباحث فنی
فرانت-اند(front-end): تمامی نرم افزار های موبایلی و یا تحت وبی که از نزدیک در تعامل با آن ها قرار می گیرد و از ویژگی هایی که در اختیار شما قرار می دهند استفاده می کنید. مانند نرم افزار های موبایلی که بر روی گوشی های هوشمند خود نصب دارید.
بک-اند(back-end): بخش نرم افزاری یک برنامه که شاید شما هیچ نشانه ای از آن را به ظاهر نمی بینید ولی با اجرای آن یک سری فرآیند اجرا شده و اطلاعات مورد نیاز فرانت-اند را ارسال می کند و فرآیندهایی که شما در بخش فرانت-اند انجام می دهید مانند ذخیر یک عکس را مدیریت کرده و این کار را برای شما انجام می دهند. و می توان گفت بخشی است که ارتباط فرانت-اند با سرور را برقرار می کند و سرور نیز یک ماشین با پردازش های مختلف است که درنهایت یک ارتباط پایدار را با اینترنت و پایگاه داده برقرار می کند.
معروف ترین تکنولوژی های بک-اند (سمت سرور)
فرانت-اند یک وب سایت و یا یک اپلیکیشن در صورتی کارایی خود را خواهد داشت. که با یک تکنولوژی سمت سرور ترکیب شود. و بک-اند ترکیبی از سرور و اپلیکیشن و پایگاه داده است .و یک برنامه نویس بک-اند استفاده و نگهداری می کند از تکنولوژی همه این موارد را با هم داشته باشد.
- زبان های سمت سرور مانند : PHP , RUBY , PHYTON , JAVA , .NET , NODE.JS
- پایگاه داده : MYSQL (RDBMS) , NOSQL (DYNAMIC DATABASE LIKE MONGODB)
در این مقاله می خواهیم دو زبان سمت سرور محبوب و کاربردی را با یکدیگر مقایسه کنیم. هرچند که “مقایسه” واژه مناسبی در حوزه برنامه نویسی نیست. چرا که هر زبان برنامه نویسی کاربردها معایب و مزیت های خاص خود را دارد. در حال حاضر هدف از این کار آشنایی هرچه بیشتر شما با ساختار هر یک از این زبان ها و همچنین کمک به شما در انتخاب بهترین و موثرترین زبان برای پروژه ای که شما شاید در آینده قصد انجام آن را دشته باشید می باشد.
در زبان های برنامه نویسی سمت سرور زبان php زودتر از NODE.JS منتشر شده و مورد استفاده قرار گرفته است. از طرفی پی اچ پی برای مدیریت تمامی وظایفی که در سمت سرور باید انجام شود. از پورت ۸۰ استفاده می نماید و همچنین از دیتابیس MYSQL جهت انجام فرآیندهای مربوطه استفاده می شود.
جاوا اسکریپت تنها چیزی است که شما به طور مستقیم در ارتباط با آن هستید و توسط مرورگر به طور مثال مدیریت می شود. بسیاری از سیستم های مدیریت محتوا از PHP برای اجرای فرآیندها در سطح سرور استفاده می کنند ولی با ظهور نود جی اس (NODE.JS) در سال ۲۰۰۹ میلادی توسط رایان دال (ryan dahl) می توان گفت نبرد بین بقا و برتری میان این دو ساختار آغاز شد.
در حال حاضر هر دوی این ها نقش خود را برای اینکه برنامه نویس را متقاعد به استفاده از خود کنند تلاش می نمایند و این درحالی است که یکی مخزنی از تجربه های بسیار شگفت انگیز و تاریخچه ای چند ده ساله و دیگری چراغ خاموش با سرعت و برتری در حال عبور از آن است.
اجازه دهید هر یک از این ساختارهای برنامه نویسی سمت سرور را با توجه به پارامترهای زیر با یگدیگر مقایسه نماییم:
عملکرد بهینه سمت سرور:
انتخاب php یا node.js تماما بستگی به ساختار پروژه حال چه سایت و چه اپلیکیشن دارد اما اگر قرار است دیتای بزرگی را در سطح سرور جابه جا کنیم و یا نیاز به ارتباط های همزمان سریع داریم نود جی اس بهترین گزینه می باشد و همه این موارد به دلیل ساختار رویدارمحور (event-driven) و مسدود ناپذیر (non-blocking) نود جی اس انجام می شود.
با توجه به گزارش ها در ساختار سمت سرور برنامه موبایلی سرکت linkedin این شرکت توانسته بود تعدادسرورهای خود را از ۳۰ به ۳ کاهش دهد و این درحالی است که هم اکنون ظرفیت کافی برای برای مدیریت زیرساخت و منابعی که در اختیار دارد را دارا می باشد و همه این ها به دلیل تغییر زیرساخت از ROR به nodejs است و پی پال نیز مشابه linkedin همچین رویه ای را طی کرد و از java به nodejs تغییر وضعیت داد. نود جی اس تقریبا دو برابر سریع تر به واسطه افراد کمتری .و البته از ۳۳% کاهش کد و ۴۰% فایل های ایجادی کمتر توسعه داده شده است.
عملکرد:
استاندارد php zend runtime از ساختار interpreted compilation strategy. جهت اجرای کد کمتر و بهینه شده استفاده می کند و این درحالی است که نود جی اس از تلفیقی از JIT و موتور جاوااسکریپ v8 گوگل کروم استفاده می کند. و این استراتژی برای زبان های پویا خود را اثبات کرده است اما اغلب زمان شروع را افزایش می دهد.
Multitasking:
همانطور که گفتیم نود جی اس کارآمدی فوق العاده ای در مدیریت چندین درخواست همزمان را دارد. این امکان پذیر است زیرا نود جی اس از ساختارهای رویداد محور که مسدود نمی شوند و بر روی یک ترد اجرا می شوند بهره برده است. اما در عوض php از ساختاری استفاده می کند که مسدود پذیر است (Blocking) و با توجه به این محدودیت پاسخ به درخواست ها بستگی به پردازش های Thread دارد.
در این شرایط اگر یک عملیات سنگین همراه با چندیدن درخواست همزمان توسط کاربر درخواست شود. سرور از منابع موجود برای پردازش درخواست ها (request) استفاده کرده. و انجام این پردازش ها با تاخیرهایی در ارسال response مناسب برای اپلیکیشن و یا سایت کاربر همراه است. وب سرور هایی همچون Apache و Nginx راهکارهایی برای اینکه php عملکرد بهتری .را در مواجهه با multi-taskingها داشته باشد در نظر گرفته اند. ولی همه اینها محدودیت هایی بیشتر از آنکه خود زبان از multi-tasking پشتیبانی کند دارند.
دسترسی به کامند لاین (command-line):
پی اچ پی (php) : $php –i
نود جی اس (nodejs) : $node
فرآینده های سنکرون و آسنکرون (synchronous or asynchronous)
سنکرون () : کدها خط به خط اجرا می شوند به طوری که بعد از اینکه فرآیند یک خط انجام شد فرآیند اجرای خط بعد آغاز می شود.
آسنکرون () : همه خطوط برنامه در یک زمان اجرا می شوند.
فرآیندها در پی اچ پی با توجه به ساختار سنکرون اجرا می شوند. البته API هایی هستند که امکان اجرای فرآیندها را به شکل آسنکرون در میان فرآیندهای سنکرون می دهند. تصور کنید که یک تابع در برنامه خود دارید که باید اجرا شود. و خط بعد از این تابع زمان اجرا خواهد شد که اجرای تابع تمام شود و نتیجه مطلوب بدست آید.
این امر باعث کاهش سرعت و کارایی و انتظار کاربر برای دریافت response مناسب می شود.
در عوض فرآیندها در نود جی اس با توجه به ساختار آسنکرون اجرا می شوند. به این معنی که موتور جاوااسکریپت تمامی کدها را در یک زمان و بدون انتظار برای بازگشت respose از سایر توابع و فرآیندها اجرا می نماید. همین مسئله باعث عملکرد بهتر و سرعت بیشتر در فرآیندهای همزمان شده است.
توجه: برنامه ممکن است در بخشی از اجرای فرآیند گیر کند اگر تعدادی از توابع نیاز داشته باشند. به اینکه داده ای از یک تابع دیگر به آنها پاس داده شود. این مشکل هم در نود جی اس با وجود ویژگی Async/await که کمک می کند بلاکی که نیاز است به صورت saynchronous اجرا شود.
جا به جایی بین محیط ها و زبان های مختلف باعث کاهش راندمان هنگام کد نویسی و در نهایت کاهش کارایی برنامه نویس می شود.
در پی اچ پی کاربر دائما بین زبان ها با ساختار های متفاوت جا به جا شده و اقدام به نوشتن برنامه مد نظر خود می کند. به طوری که ما عمدتا از بخش های متفاوتی مانند mysql برای دیتابیس و php برای سمت سرور استفاده می نماییم و از طرفی دانستن مواردی همچون html,css و js مزیت محسوب می شود.
این درحالی است که پلتفرم نود جی اس ساختاری مبتنی بر جاوا اسکریپت دارد. پس زمانی که شما جاوااسکریپت و استانداردهای (ٍES6…) آن را بدانید در نهایت هم فرانت-اند را خواهید داشت. و هم با کمی تلاش برای آشنایی با متودهای نود جی اس می توانید. به بک-اند هم مسلط شده و دیگر نیازی نیست. که برای اجرای پروژه های خود بین زبان ها و ساختارهای مختلف برنامه نویسی جا به جا شوید. زیرا دیگر شما با دانش جاوا اسکریپتی خود می توانید و فرانت-اند و هم بک-اند را کار کنید.