جستجو برای:
سبد خرید 0
  • صفحه اصلی
  • دوره ها
    • راهنمای یادگیری
  • بلاگ
  • تالار گفتمان
  • کانال تلگرام

ورود

رمز عبور را فراموش کرده اید؟

هنوز عضو نشده اید؟ عضویت در سایت
perm_identity
سبد خرید 0
  • درباره ما
  • تماس با ما
0
آموزش های کاربردی جاوا اسکریپت
  • صفحه اصلی
  • دوره ها
    • راهنمای یادگیری
  • بلاگ
  • تالار گفتمان
  • کانال تلگرام
ورود و ثبت نام

وبلاگ

آموزش های کاربردی جاوا اسکریپت > بلاگ > NodeJS > مقایسه NodeJS و PHP ، نبرد برتری و بقا !

مقایسه NodeJS و PHP ، نبرد برتری و بقا !

مقایسه php و nodejs

قبل از اینکه به مقایسه php و  nodejs بپردازیم در مرحله اول باید بفهمیم که چرا یک همچین مقوله ای در بین جوامع برنامه نویس به وجود آمده است مخصوصا در بین برنامه نویس های backend . همه این بحث ها بر سر استفاده از php  و یا Nodejs از افزایش تقاضای کاربران برای استفاده از برنامه های گوشی های هوشمند آغاز شد.به طوری که apple store شرکت اپل دربرگیرنده 2 میلیون برنامه و play store شرکت Google دربرگیرنده بیش از 2.2 میلیون برنامه می باشند.موفقیت بسیاری از این برنامه ها، بازی ها و مسنجرها باعث شده است که برنامه نویسان backend  مجبور شوند خود را با جدیدترین تکنولوژی که بتواند درخواست های همزمان را بهتر مدیریت کند انطباق دهند.میلیون ها نفر از کاربران این برنامه ها اقدام به مبادله نوعی از این داده ها می کنند به همین دلیل پردازش این حجم وسیع از داده نیازمند یک زیرساخت قوی و مقیاس پذیر و سریع هست .

با یادگیری زبان ماشین و داده های بزرگ(Big-data) که به سرع در حال پیشرفت و توسعه هستند می توانیم خود به سرعت در این مسیر قرار دهیم و شطح خود را به سطوح بالاتر و جدیدتر ارتقاء دهیم.

پیش درآمدی بر مباحث فنی :

فرانت-اند(front-end) : تمامی نرم افزار های موبایلی و یا تحت وبی که از نزدیک در تعامل با آن ها قرار می گیرد و از ویژگی هایی که در اختیار شما قرار می دهند استفاده می کنید. مانند نرم افزار های موبایلی که بر روی گوشی های هوشمند خود نصب دارید.

بک-اند(back-end) : بخش نرم افزاری یک برنامه که شاید شما هیچ نشانه ای از آن را به ظاهر نمی بینید ولی با اجرای آن یک سری فرآیند اجرا شده و اطلاعات مورد نیاز فرانت-اند را ارسال می کند و  فرآیندهایی که شما در بخش فرانت-اند انجام می دهید مانند ذخیر یک عکس را مدیریت کرده و این کار را برای شما انجام می دهند. و می توان گفت بخشی است که ارتباط فرانت-اند با سرور را برقرار می کند و سرور نیز یک ماشین با پردازش های مختلف است که درنهایت یک ارتباط پایدار را با اینترنت و پایگاه داده برقرار می کند.

معروف ترین تکنولوژی های بک-اند(سمت سرور) :

فرانت-اند یک وب سایت و یا یک اپلیکیشن در صورتی کارایی خود را خواهد داشت که با یک تکنولوژی سمت سرور ترکیب شود و بک-اند ترکیبی از سرور و اپلیکیشن و پایگاه داده است و یک برنامه نویس بک-اند استفاده و نگهداری می کند از تکنولوژی همه این موارد را با هم داشته باشد.

  • زبان های سمت سرور مانند : PHP , RUBY , PHYTON , JAVA , .NET , NODEJS
  • پایگاه داده : MYSQL(RDBMS) , NOSQL(DYNAMIC DATABASE LIKE MONGODB)

در این مقاله می خواهیم دو زبان سمت سرور محبوب و کاربردی را با یکدیگر مقایسه کنیم هرچند که “مقایسه” واژه مناسبی در حوزه برنامه نویسی نیست چرا که هر زبان برنامه نویسی کاربردها معایب و مزیت های خاص خود را دارد و در حال حاضر هدف از این کار آشنایی هرچه بیشتر شما با ساختار هر یک از این زبان ها و همچنین کمک به شما در انتخاب بهترین و موثرترین زبان برای پروژه ای که شما شاید در آینده قصد انجام آن را دشته باشید می باشد.

در زبان های برنامه نویسی سمت سرور زبان php زودتر از NODEJS منتشر شده و مورد استفاده قرار گرفته است از طرفی پی اچ پی برای مدیریت تمامی وظایفی که در سمت سرور باید انجام شود از پورت 80 استفاده می نماید و همچنین از دیتابیس MYSQL جهت انجام فرآیندهای مربوطه استفاده می شود.

جاوااسکریپت تنها چیزی است که شما به طور مستقیم در ارتباط با آن هستید و توسط مرورگر به طور مثال مدیریت می شود.بسیاری از  سیستم های مدیریت محتوا از PHP برای اجرای فرآیندها در سطح سرور استفاده می کنند ولی با ظهور نود جی اس(NODEJS) در سال 2009 میلادی توسط رایان دال(ryan dahl) می توان گفت نبرد بین بقا و برتری میان این دو ساختار آغاز شد.در حال حاضر هر دوی این ها نقش خود را برای اینکه برنامه نویس را متقاعد به استفاده از خود کنند تلاش می نمایند و این درحالی است که یکی مخزنی از تجربه های بسیار شگفت انگیز و تاریخچه ای چند ده ساله و دیگری چراغ خاموش با سرعت و برتری در حال عبور از آن است .

اجازه دهید هر یک از این ساختارهای برنامه نویسی سمت سرور را با توجه به پارامترهای زیر با یگدیگر مقایسه نماییم :

عملکرد بهینه سمت سرور :

انتخاب php  یا nodejs تماما بستگی به ساختار پروژه حال چه سایت و چه اپلیکیشن دارد اما اگر قرار است دیتای بزرگی را در سطح سرور جابه جا کنیم و یا نیاز به ارتباط های همزمان سریع داریم نود جی اس بهترین گزینه می باشد  و همه این موارد به دلیل ساختار رویدارمحور(event-driven) و مسدود ناپذیر(non-blocking) نود جی اس انجام می شود.

با توجه به گزارش ها در ساختار سمت سرور برنامه موبایلی سرکت linkdin این شرکت توانسته بود تعدادسرورهای خود را از 30 به 3 کاهش دهد و این درحالی است که هم اکنون ظرفیت کافی برای برای مدیریت زیرساخت و منابعی که در اختیار دارد را دارا می باشد  و همه این ها به دلیل تغییر زیرساخت از ROR به nodejs است. و پی پال نیز مشابه linkedin همچین رویه ای را طی کرد و از java به nodejs تغییر وضعیت داد. نود جی اس تقریبا دو برابر سریع تر به واسطه افراد کمتری و البته از 33% کاهش کد و 40% فایل های ایجادی کمتر توسعه داده شده است.

عملکرد :

استاندارد 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…) آن را بدانید در نهایت هم فرانت-اند را خواهید داشت و هم با کمی تلاش برای آشنایی با متودهای نود جی اس می توانید به بک-اند هم مسلط شده و دیگر نیازی نیست که برای اجرای پروژه های خود بین زبان ها و ساختارهای مختلف برنامه نویسی جا به جا شوید زیرا دیگر شما با دانش جاوااسکریپتی خود می توانید و فرانت-اند و هم بک-اند را کار کنید.

ماژول ها :

در پی اچ پی برای اینکه از ماژول های مختلف در پروژتان استفاده کنید می توانید از سرویس هایی همچون PEAR و COMPOSER استفاده و ماژول مدنظرتان را نصب و مدیریت نمایید.

نود جی اس نیز در اقدامی مشابه از یک پکیج منیجر با عنوان NPM پشتیبانی می کند که می توانید از طرق آن به ماژول ها دسترسی داشته باشید.

فریمورک ها :

پی اچ پی یکی از زبان های سمت سرور محبوب و پر کاربرد می باشد. که به همین دلیل فریمورک های مختلف با ویژگی های شگفت انگیزی برای آن وجود دارد مانند Laravel , Cakephp ,codeigniter و … باعث افزایش سرعت کارایی و امنیت بیشتر در پروژه ها می شوند.

نود جی اس هم مشابه پی اچ پی دربردارنده فریمورک هایی همچون Express , meteor , koa ,hapi , sails و …. می باشد

دیتابیس :

پی اچ پی از نوعی دیتابیس رابطه ای مانند Mysql , MariaDB , PostgreSQL و … استفاده می کند و این درحالی است که می توان با کمک از ابزارهایی خاص از دیتابیس NoSql استفاده کرد هرچند که عمومیت ندارد.نکته ای که باید به آن اشاره شود این است که اکثرا این نوع دیتابیس ها مورد هجوم حملات sql injection و XSS قرار می گیرند.

نود جی اس به صورت اختصاصی و مدیریت شده با دیتابیس های NoSql کار می کند مانند MongoDB , couchDB و … که هرکدام از طریق NPM در دسترس هستند و می توان به راحتی آنها را نصب و مورد استفاده قرار داد.برای این نوع دیتابیس هم حملات nosql injection وجود دارد ولی نه به اندازه دیتابیس های  رابطه ای  plghj sql injection البته امری طبیعی است در ساختار این نوع از دیتابیس ها از کدهایی استفاده شده است که در برابر اینگونه حملات مقاوم باشند.

PHP Node JS
CMS Magento, WordPress, Opencart, Drupal, Joomla, PrestaShop Apostrophe2, Ghost, KeystoneJS, enduro.js, Pencilblue
MVC frameworks Symfony, Laravel, Yii, Codeigniter, Zend, Phalcon, CackePHP Koa JS, Express JS, Sails JS
Realtime Ratchet, Wrench, Elephant.io, Socket.io ws, Sockjs, Socket.io
REST API RestClient, Guzzle, HTTPFUL Restify, Loopback
Scaffolding symfony+, laravel+ , yii+, CackePHP Yeoman
HTML templating Twig
Blade
Latter
Smarty
Volt
Mustache
Jade
Underscore
EJS
Handlebars
Mustache
Embedded js
Horizontal scaling implementation Elastic beanstalk, varnish Cluster mode, Amazon Elastic Beanstalk
Load balancer support + +
Queues + +
Multiple drivers support DB, storage + +
Full-text search + +
Profiling Xdebug, Blackfire, XHProf, XHGui Built in profiler
Caching Redis, Memcache Redis, Memcache
CI support Travis CI, Codeship Travis CI, Codeship

QA

PHPUnit
Cucumber (behat)
Atoum
Selenium
Dusk
Kahlan
Php_testability
Codeception
Phantom.js
Jasmine
Protractor
Nightwatch.js
Casper.js
Nemo.js
Buster.js
Selenium

 اگر قصد دارید یک برنامه نویس حرفه ای Node Js بشید میتونید دوره آموزش جامع Node Js رو مشاهده کنید.

 

منابع [1 , 2]

اشتراک گذاری:
برچسب ها: nodejsphpphp vs nodejsبرنامه نویسیجاوااسکریپتمقایسه php و nodejsنود جی اسپی اچ پی
مطالب زیر را حتما بخوانید
  • 10 کاری که برای اجرای Nodejs بر روی هاست باید انجام دهید
    10 کاری که برای اجرای Nodejs بر روی هاست باید انجام دهید-سری دوم

    44 بازدید

  • 10 کاری که برای اجرای Nodejs بر روی هاست باید انجام دهید
    10 کاری که برای اجرای Nodejs بر روی هاست باید انجام دهید-سری اول

    99 بازدید

  • شروع سومین سال فعالیت reactapp

    260 بازدید

  • مانیتورینگ NodeJS با استفاده از PM2-سری دوم
    مانیتورینگ NodeJS با استفاده از PM2-سری دوم

    107 بازدید

  • reactpp-nodejsCourse-liara-gift
    هدیه ویژه کاربران دوره Nodejs | پنجاه هزار تومان اعتبار سرویس لیارا

    214 بازدید

جدید تر آشنایی با Type Script و نحوه نصب آن
قدیمی تر ارسال sms به صورت مستقیم در React Native

8 دیدگاه

به گفتگوی ما بپیوندید و دیدگاه خود را با ما در میان بگذارید.

  • علی گفت:
    تیر 1, 1398 در 8:42 ق.ظ

    مقایسه خوب و کاملی بود.

    پاسخ
  • بازار وردپرس گفت:
    تیر 1, 1398 در 11:42 ق.ظ

    سلام
    بسیار بسیار مقاله مفیدی بود، ممنون و متشکرم از وب سایت زیبا و پر بارتون
    براتون آرزوی موفقیت و پیروزی دارم

    پاسخ
  • وحید گفت:
    تیر 2, 1398 در 6:10 ب.ظ

    این مقاله از طرف ی‌ک nodejs کار نوشته شده و منصفانه نیشت

    پاسخ
    • علی کیانی گفت:
      تیر 2, 1398 در 7:51 ب.ظ

      موضوع صرفا مقایسه این دو ساختار نیست مطمئنن php , nodejs هر کدوم ویژگی های خاص خودش رو داره حالا چه شما از php سمت سرور استفاده کنین چه nodejs در نهایت خروجی مطلوبه که شما بهترین ساختار رو با توجه به شرایط پروژه انتخاب می کنید

      پاسخ
  • سعید یوسفی-برنامه نویس همراه اول گفت:
    تیر 4, 1398 در 1:15 ب.ظ

    پی اچ پی صرفا به خاطر اینکه قدیمی هست مونده ، وگرنه واضحه که بین پژو و بنز کدوم انتخاب میشه. واقعا اگر شما از قبل پی اچ پی کار نبودید یا شرایط شرکت ایجاب نمی کرد، نود رو رها می کردیدو پی اچ پی رو یاد می گرفتید.

    پاسخ
    • علی کیانی گفت:
      تیر 4, 1398 در 9:23 ب.ظ

      هر زبان و پلتفرم توسعه مزیت ها و معایب خاص خودش رو داره و همیشه باتوجه به شرایطی که پروژه داره انتخاب میشه حالا ممکن ساختار که برای توسعه یک برنامه انتخاب میکنین برای سایر برنامه ها مناسب نباشه و درنهایت مجبورین از یک زبان و یا یک پلتفرم دیگه برای توسعه استفاده کنین به نظر من خوبه که روی یک ساختار بیش از اندازه تعصب نداشته باشیم.

      پاسخ
  • پیروز گفت:
    تیر 5, 1398 در 7:25 ب.ظ

    بیشتر به نظرم بسته به برنامه نویسش داره هیچ فرقی نداره زبانهای برنامه نویسی با یه مقایسه کوچیک در سایتهای خارجی متوجه می شید که زبانهای برنامه نویسی یکی هستند با یم قابلیت .
    شما بفرمایید چه امکانی node.js داره که پی اچ پی نداره ؟
    فقط php یک مزیت بزرگ داره که همه جا میشه ازش استفاده کرد حتی هاستهای اشتراکی .
    بنظر من برنامه نویسهای تازه کار میان همچین مقایساتی می کنند وگرنه اگر برنامه نویس حرفه ای که چندتا زبان بلد باشه بپرسید میگه همشون یکیه .

    پاسخ
    • علی کیانی گفت:
      تیر 5, 1398 در 7:47 ب.ظ

      مسلما الگوریتمی که برای توسعه یک برنامه در نظر میگیرین برای تمام ساختارهای برنامه نویسی یکسانه و درنهایت باید انتخاب کنین که باید از چه ساختاری برای پیاده سازی استفاده کنین ولی مسلما برنامه نویس حرفه ای که چند زبان برنامه نویسی رو باد داره به مزیت ها و معایب و موارد کاربرد هر کدوم از زبان ها آشنا و اصولا یکی از دلایلی که چند زبان رو کار میکنه هم همینه و البته در رابطه با nodejs و php هم این موضوع صدق میکنه درنهایت این وظیفه برنامه نویسه که بهترین ساختار رو برای توسعه در نظر بگیره

      پاسخ

پاسخی بگذارید لغو پاسخ

جستجو
جستجو برای:
دسته‌ها
  • Material UI
  • NodeJS
  • React
  • React Native
  • Vue Js
  • آموزش متنی
  • استارت آپ و آموزش
  • برنامه نویسی
  • جاوااسکریپت
  • گپ و گفت
reactapp-logo
  • phone_android
    09150274110
  • email
    contact@reactapp.ir
  • بلاگ
  • تله فیلم آموزشی
  • قوانین
  • سوالات متداول
  • آموزش متنی
کلیه حقوق این سایت محفوظ و متعلق به reactapp.ir میباشد.
keyboard_arrow_up