PHP و Node.js هر دو دربرنامه نویسی سمت سرور استفاده میشوند و شاید بتوان آنها را رقیب هم دانست. البته استفاده از کلمه “شاید” به این خاطر است که نمیتوان گفت PHP از نود جی اس بهتر است و همه باید از آن استفاده کنند یا برعکس درست نیست بگوییم که Node.js بهترین محیط برای برنامه نویسی سمت سرور است و دیگر نباید از PHP استفاده کنیم. هر دو پلتفرمی که امروز بررسی میکنیم “خوب” هستند و اگر در جای درست استفاده شوند، میتوانند کیفیت برنامه تحت وب ما را بالا ببرند. در این پست ما زبان برنامه نویسی PHP را کنار محیط اجرایی Node.js قرار میدهیم و در چند مورد متنوع به مقایسه PHP با Node.js میپردازیم.
PHP مخفف Hypertext Preprocessor بوده و در سال 1994 توسط Rasmus Lerdorf طراحی گردید. PHP یک زبان متن باز و چندمنظوره میباشد اما بیشتر برنامه نویسان در سمت سرور از آن استفاده میکنند. کدهای PHP با پسوند .php ذخیره شده و داخل این فایلها میتوان کدهای HTML، CSS، Javascript و حتی متن ساده هم قرار داد.
Node.js یک محیط اجرایی برای زبان برنامه نویسی جاوا اسکریپت است که بر پایه موتور جاوا اسکریپت گوگل (V8 Engine) طراحی و برنامه نویسی شده است. به کمک Node.js میتوان اپلیکیشن هایی مقیاس پذیر، با سرعتی بالا نوشت. فایلهای نود جی اس با پسوند .js ذخیره شده و فقط شامل کدهای جاوا اسکریپت میباشد. این محیط اجرایی در سال 2009 توسط Rayn Dahl نوشته شد و به برنامه نویسان این قدرت را داد تا یک سرویس کامل را با زبان جاوا اسکریپت پیاده سازی نمایند.
هر دو پلتفرم میتوانند به خط فرمان دسترسی داشته باشند، اما با دستوراتی متفاوت این کار انجام میشود. در PHP با دستور $ php -i و در Node.js با $ node میتوانیم در محیط خط فرمان اسکریپت اجرا کنیم. در ادامه دستور معروف برنامه نویسی یعنی چاپ “Hello World” را با PHP و محیط اجرایی Node.js اجرا خواهیم کرد تا کمی با سینتکس و ساختار کدهای این دو پلتفرم آشنا شویم.
نمونه کد نوشته شده با PHP
echo 'Hello 7learn';
نمونه کد نوشته شده با Node.js
console.log('Hello 7learn');
در برنامه نویسی Synchronous کدهای نوشته شده به ترتیب اجرا شده و ما با یک توالی خطی مواجه هستیم. یعنی با شروع برنامه اول خط 1 اجرا شده و بعد خط 2 وهمین روال تا آخر برنامه ادامه پیدا میکند. اما در Asynchronous ترتیب اجرای کدها خطی نبوده و هیچ اجباری نیست که برنامه به طور خط به خط اجرا شود. حالا با این ذهنیت به مقایسه PHP با Node.js میپردازیم.
کدهای PHP به صورت synchronous اجرا میشوند اما یک سری API وجود دارد که اجازه میدهد برنامه نویسی نامتقارن را در PHP تجربه کنید. با یک مثال متوجه اهمیت موضوع برنامه نویسی Asynchronous یا نامتقارن خواهید شد. فرض کنید اولین خط برنامه شما تابعی است که زمان زیادی برای اجرا شدن نیاز دارد. در این حالت تا خط اول برنامه به طور کامل اجرا نشود، نمیتوان دستورات بعدی را اجرا کرد.
در مقابل Node.js از نظر ماهیت به راحتی میتواند به صورت ناهمگام یا Asynchronous کار کند. به این شکل که موتور جاوا اسکریپت کل کد را اجرا کرده و منتظر بازگشت یک تابع خاص نیست. به این شکل نود جی اس میتواند سریعتر کار کرده و هنگامی که تعداد زیادی درخواست دریافت میکند بهتر از PHP آنها را مدیریت کند.
جا به جا شدن بین زبانهای برنامه نویسی مختلف و محیطهای متنوع ممکن است در فرآیند تولید محصول کمی کار برنامه نویس را سخت کند. زمانی که از PHP استفاده میکنید، باید تسلط مناسبی روی پایگاه داده هایی مثل MySQL داشته باشید، در کنار آنها باید به HTML، CSS و جاوا اسکریپت هم مسلط باشید.
از آنجایی که Node.js با جاوا اسکریپت نوشته شده است، میتوانید هم سمت سرور هم سمت کلاینت فقط از زبان جاوا اسکریپت استفاده کنید. پس دیگر نیازی نیست مرتب بین زبانهای برنامه نویسی مختلف جا به جا شوید. پس هنگام استفاده از نود جی اس، شما فقط با سینتکس جاوا اسکریپت سر و کار دارید.
PHP برای مدیریت ماژولها و بستههای مختلف نرم افزاری، از تکنولوژی هایی مثل PEAR یا Composer استفاده میکند. PEAR یک فریم ورک و سیستم توزیع شده است که اجازه میدهد با کامپوننتهای مختلف PHP کار کنید. Composer هم ابزاری برای مدیریت وابستگیها در PHP است، این ابزار کتابخانه هایی که پروژه به آن وابسته است را پیدا کرده و آنها را برای برنامه نویس مدیریت (نصب و بروزرسانی) میکند. در طرف مقابل نود جی اس با سیستم مدیریت بسته بسیار محبوب خود یعنی NPM (Node Package Manager) ارائه میشود که استفاده از آن بسیار آسان و لذت بخش است. NPM بزرگرین مدیر بسته دنیا با نیم میلیون ماژول مختلف میباشد.
PHP محبوبترین زبان برنامه نویسی سمت سرور است و فریم ورکهای مختلفی برای این زبان عرضه شده است تا سرعت کار برنامه نویسان را بالا ببرد. بعضی از فریم ورکهای معروف PHP عبارتند از لاراول، کدایگنایتر، سیمفونی و غیره که به طورگسترده توسط برنامه نویسان استفاده میشوند. در آن سمت هم جاوا اسکریپت عملکرد مناسبی از لحاظ تنوع فریم ورکها داشته است. برخی از فریم ورکهای معروف مثل Express.js یا فریم ورکهای فول استک با پشتیبانی از MVC مثل Meteor یا Derby که بسیار خوب طراحی شده اند.
PHP در بیشتر مواقع برای کار با دادهها از دیتابیسهای رابطه ای مثل MySQL، MongoDB، PostgreSQL و غیره استفاده میکند. هر چند راهکارهای مختلفی برای استفاده از دیتابیس NoSQL در PHP وجود دارد. اما چندان رایج نیست و بین برنامه نویسان محبوبیت زیادی ندارد.
از طرفی Node.js بدون هیچ مشکلی با دیتابیسهای NoSql کار میکند. نود جی اس با دیتابیسهای MongoDB، CouchDB و پایگاه دادههای مبتنی بر گراف مثل New4j هماهنگ است. تقریبا تمام دیتابیسهای مطرح دنیا در مخزن NPM به صورت پکیج وجود دارند و میتوان از آنها استفاده کرد.
تا قبل از نسخه 5.4 PHP برنامه نویسان باید از نرم افزارهایی مثل Xampp یا Lamp برای راه اندازی سرور استفاده میکردند. اما از نسخه 5.4 به بعد PHP با یک سرور داخلی (built-in) ارائه شد. در مقابل Node.js که برای طراحی برنامههای تحت وب استفاده میشود، داخل خود ماژولهای مهمی مثل http، DNS، فایل سیستم و غیره را داشته که به برنامه نویسان کمک میکند وب سرور خود را شخصی سازی کنند. برخی از فریم ورکهای محبوب که به Node.js قدرت میدهند تا وب سرور را اجرا کند عبارتند از Express.js، Koa.js و Sails.js و راه اندازی سرور با این فریم ورکها در چند خط کد و به سادگی انجام میشود.
در این مطلب به مقایسه PHP با Node.js پرداختیم و از ابعاد مختلف این دو پلتفرم را بررسی کردیم. باید با توجه به ویژگیهای محصول خودمان، سراغ PHP یا Node.js برویم. معمولا در برنامه هایی که نیاز به عملیات پردازشی سنگین دارند، مثل آنالیز دادههای گسترده (هواشناسی و غیره) سیستمهای مدیریت محتوا (وردپرس، جوملا و غیره) استفاده میشود. PHP برای ساخت بلاگ، سایتهای خبری یا فروشگاههای تجاری عالی است. در مقابل Node.js به خاطر رویداد محور بودن و استفاده از Asynchronous گزینه ایده آلی برای برنامههای real-time است.سرویسهایی مثل چت روم، استریم ویدئو یا موسیقی، سایتهای تک صفحه ای یا SPA، سیستمهای مدیریت پروژه و به طور کلی هر سرویسی که نیاز به تعامل زیادی با کاربر دارد میتواند از Node.js استفاده کند.