عبدالفتاح الصلوي

مالفرق بين php و nodejs

كتبها : عبدالفتاح الصلوي / في رصيف : البرمجة

مالفرق بين php و nodejs

#كلام_مبرمجين
ردا على سؤال يتردد كثير

مالفرق بين  Node Js و php ؟

وطريقة تعامل كل تقنية مع الطلبات

الموضوع متشعب وطويل ولكن لكي تفهم الاختلافات يجب أن تفهم اولا المصطلحين التاليين :

- Synchronous  

- Asynchronous

 
في ال Synchronous يتم تنفيذ الكود تزامنياً، حيث يتم اعادة الناتج عند انتهاء التنفيذ على شكل response وهنا سننتظر حتى الانتهاء ليتم تنفيذ الطلبات الأخرى . ويمكن ان نعتبر php تعتمد على هذه الطريقة مع العلم ان في  php  يتم تنفيذ الكود واعادة الناتج وقد تعتمد على تنفيذ الطلبات  الموجهة من برنامج ال web server  مثل apache او nginx وغيره, وهناك ما يسمى FPM (FastCGI Prosses Manager).   

أما في Asynchronous كما في الnode js يتم الاعتماد على مفهوم يسمى envent loop ،حيث سيتم استقبال الطلب ولن ننتظر للناتج بل يمكن استقبال طلبات اخرى  ومتى ما تم الانتهاء من جلب البيانات لأي طلب سيتم اعادة الطلب للمستخدم. أما كيف يعيد الطلب للمستخدم المعين فهنا كأننا نقوم بعمل callback أي اننا نخبر السيرفر هنا  (node js) خذ هذا الطلب وعند الانتهاء منه قم باشعارنا وتنفيذ الناتج .

ولكي تتضح الأمور يجب ان نفهم أن node js تستخدم محرك V8 وان جافا سكربت يتم معالجتها بطريقة JIT) Just In Time)   .

 السؤال ما هو ال v8 ؟  

هو عبارة عن مفسر او معالج للكود يقوم بتنفيذ اكواد الجافا سكربت وبدأ استخدامه في متصفح chrome ، الجميل أن هذا المفسر (المعالج) مكتوب بلغة c++ مما يعني السرعة و يمكن استخدامه منفصلا عن المتصفح ويمكن أن يعمل على أي نظام تشغيل،  وهنا سيعمل على السيرفر .
و node js تعتبر   single-threaded. كما  تستخدم  مكتبة Libuv المكتوبة بلغة c للتعامل مع عمليات مثل i/o .

هناك بالطبع تفاصيل أخرى ، اذ يمكن ايضاً في php معالجة الطلبات Asynchronous باستخدام مكتبات مثل amphp, reactphp وغيرها  و اصدار 8.1 يتضمن Fibers في نواة اللغة والذي يمكن من خلاله التعامل مع مفهوم الAsynchronous . و الاصدار الثامن  يتضمن مزايا مثل JIT.


 حاولت الاختصار ولكن يجب أن تغوص في التفاصيل لتفهم كل شيء للمزيد ابحث عن المصطلحات التالية :
- Synchronous  
- Asynchronous
- Event Loop
- V8 JavaScript Engine
- Web server
- Single threaded
- Multi threaded
- Thread pool
- Event queue
- Web Server
- JIT
- Fiber
- Promise
- Callback
- Scripting Language
- Runtime
- Non-blocking I/O.
- Libuv.
- PHP FastCGI.
- PHP Process Managers.

علامات ذات صلة :