Node.js یک محیط برنامه نویسی برای زبان جاوا اسکریپت است. پیش از معرفی این پلتفرم، برنامه نویسان جاوا اسکریپت کدهای خود را در مرورگر اجرا میکردند. برای همین با عرضه Node.js امکان اجرای کدهای جاوا اسکریپت در سمت سرور نیز مهیا شد. در ادامه این مطلب با نود جی اس بیشتر آشنا شده و به کاربردها و ویژگیهای آن خواهیم پرداخت.
آشنایی بیشتر با Node.js
جاوا اسکریپت یکی از محبوبترین زبانهای برنامه نویسی در جهان است. امروزه میلیونها سایت با این زبان قدرت گرفته و انبوهی از توسعه دهندگان و طراحان را برای ایجاد ویژگیهای جذاب و قدرتمند در وب جذب کرده است. اگر در برنامه نویسی تازه کار هستید، جاوا اسکریپت یکی از بهترین زبانهای برنامه نویسی برای یادگیری است. در 20 سال اول، جاوا اسکریپت عمدتاً برای اسکریپت نویسی سمت مشتری استفاده میشد. از آنجایی که جاوا اسکریپت فقط در تگ <script> قابل استفاده بود، توسعه دهندگان مجبور بودند در چندین زبان و فریم ورک بین اجزای front-end و back-end کار کنند. برای همین با پیدایش Node.js این محدودیتها برطرف شد. نود جی اس یک محیط زمان اجرا (run-time) است که شامل تمام چیزهایی است که برای اجرای یک برنامه نوشته شده با جاوا اسکریپت لازم است. Node.js یک محیط منبع باز و چند پلتفرمی برای ساخت برنامههای کاربردی شبکه و سمت سرور است. این محیط از معماری I/O مبتنی بر رویداد و غیر مسدود کننده استفاده میکند که آن را بسیار کارآمد کرده و برای برنامههای بلادرنگ مناسب میکند. Node.js به زبانهای C، C++ و JavaScript نوشته شده است.
رشد نود جی اس و افزایش مشتریان آن
در دو دهه گذشته رشد چشمگیری در وب سایتها وجود داشته است و همانطور که انتظار میرفت، Node.js نیز از زمان عرضه تا به امروز به سرعت در حال رشد بوده است. طبق آمار، نود جی اس در سال 2018 از آستانه یک میلیارد دانلود عبور کرد و بر اساس گفته W3Techs توسط 1.2 درصد از وب سایتها استفاده میشود. این آمار به بیش از 20 میلیون سایت در سراسر دنیای وب اشاره دارد. برای همین جای تعجب نیست که Node.js یک انتخاب محبوب برای میلیونها شرکت معروف باشد. از جمله شرکتهای معروفی که امروزه از نود جی اس استفاده میکنند، میتوان به Twitter، Spotify، eBay، Reddit، LinkedIn و Godaddy اشاره کرد.
معماری Node.js و نحوه کار آن
Node.js از معماری “Single Threaded Event Loop” برای مدیریت همزمان چندین کلاینت استفاده میکند. برای درک تفاوت این زمان با سایر زمانهای اجرا، باید درک کنیم که چگونه کلاینتهای همزمان چند رشتهای در زبانهایی مانند جاوا مدیریت میشوند. در یک مدل درخواست-پاسخ چند رشتهای، چندین مشتری یک درخواست را ارسال میکنند و سرور قبل از ارسال پاسخ، هر یک را پردازش میکند. با این حال، چندین رشته برای پردازش تماسهای همزمان استفاده میشود. این رشتهها در یک Thread Pool تعریف میشوند و هر بار که درخواستی وارد میشود، یک رشته مجزا برای رسیدگی به آن اختصاص داده میشود. در اینجا بهتر است نگاهی به هر مرحلهای که در Node.js طی میشود، داشته باشیم:
- js یک مجموعه رشته محدود را برای ارائه درخواستها حفظ میکند.
- هر زمانی که درخواستی ارسال میشود، نود جی اس آن را در یک صف قرار میدهد.
- اکنون، “حلقه رویداد” تک رشتهای (جزء اصلی) وارد میشود. این حلقه رویداد به طور نامحدود منتظر درخواستها است.
- زمانی که یک درخواست وارد میشود، حلقه آن را از صف انتخاب کرده و بررسی میکند که آیا به عملیات مسدود کردن ورودی/خروجی (I/O) نیاز دارد یا خیر. در غیر این صورت، درخواست را پردازش میکند و پاسخی را ارسال مینماید.
- اگر درخواست دارای عملیات مسدودسازی باشد، حلقه رویداد یک رشته از مخزن رشتههای داخلی را برای پردازش درخواست اختصاص میدهد. این گروه از رشتههای کمکی را گروه کارگر مینامند.
- حلقه رویداد درخواستهای مسدود کردن را دنبال کرده و پس از پردازش کار مسدود کردن، آنها را در صف قرار میدهد.
از آنجایی که Node.js از Threadهای کمتری استفاده میکند، منابع و حافظه کمتری استفاده شده و این به اجری سریع کار کمک میکند. برای همین این معماری تک رشتهای، معادل معماری چند رشتهای است. زمانی که فرد به پردازش وظایف فشرده داده نیاز دارد، استفاده از زبانهای چند رشتهای مانند جاوا بسیار منطقیتر است. اما برای برنامههای بلادرنگ، Node.js انتخاب واضح و بهتری است.
ویژگیهای Node.js چیست؟
نود جی اس از زمان عرضه تاکنون رشد زیادی داشته است. این به لطف ویژگیهای زیادی است که این پلتفرم ارائه میدهد:
- آسان بودن: js برای شروع بسیار آسان و راحت است. افراد مبتدی در توسعه وب، میتوانند از آن به راحتی استفاده کرده و کار با آن را شروع نمایند.
- مقیاس پذیری: این پلتفرم مقیاس پذیری گستردهای را برای برنامهها فراهم میکند. js که تک رشتهای است، میتواند تعداد زیادی اتصال همزمان با توان عملیاتی بالا را مدیریت کند.
- سرعت بالا: اجرای بدون مسدود کردن رشته، js را سریعتر و کارآمدتر میکند. همچنین از آنجایی که نود جی اس بر پایه نسخه 8 موتور جاوا اسکریپت گوگل کروم (V8 Engine) پیادهسازی شده است، در اجرای کدها خیلی سریع عمل میکند.
- بستههای زیاد: مجموعه گستردهای از بستههای منبع باز js موجود است که میتواند کار شما را ساده کند. امروزه بیش از یک میلیون بسته در اکوسیستم NPM وجود دارد.
- Backend قوی: js به زبانهای C و C++ نوشته شده است که این زبانها سرعت آن را افزایش میدهد و ویژگیهایی مانند پشتیبانی از شبکه را به آن اضافه میکند.
- چند پلتفرمی بودن: امکان پشتیبانی از پلتفرمهای مختلف به شما امکان میدهد تا سایتهای SaaS، برنامههای دسکتاپ و حتی برنامههای گوشی هوشمند را با استفاده از نود جی اس ایجاد نمایید.
- مدیریت و نگهداری: js یک انتخاب آسان برای توسعه دهندگان است. چرا که هر دو بخش frontend و backend را میتوان با جاوا اسکریپت به عنوان یک زبان واحد مدیریت کرد.
- عدم وجود بافرینگ: پلتفرم نود جی اس هیچ دادهای را بافر نکرده و دادههای خروجی را به صورت تکه تکه منتشر میکند.
بررسی مهمترین کاربردهای Node.js
بر اساس ویژگیهای زیادی که Node.js دارد، از آن برای طیف گستردهای از برنامهها استفاده میشود. در اینجا به مهمترین کاربردهای Node.js اشاره میکنیم:
- چتهای Real-time (بلادرنگ): js برای پردازش ارتباطات بلادرنگ مناسب است. میتواند به راحتی مقیاس شود و اغلب در ساخت رباتهای چت مورد استفاده قرار میگیرد.
- Data streaming: شرکتهایی مانند Netflix از js برای اهداف استریم و پخش استفاده میکنند. این بیشتر به خاطر سبک و سریع بودن Node.js است. علاوه بر آن Node.js یک API جریان بومی ارائه میدهد. این جریانها به کاربران اجازه میدهند تا درخواستهای خود را به یکدیگر ارسال کنند و در نتیجه دادهها مستقیماً به مقصد نهایی خود منتقل میشوند.
- برنامههای پیچیده تک صفحهای (SPA): در SPAها، کل برنامه در یک صفحه بارگذاری میشود. این معمولاً به این معنی است که چند درخواست در پسزمینه برای مؤلفههای خاص وجود دارد. حلقه رویداد js در اینجا به کمک میآید؛ چرا که میتواند درخواستها را به صورت غیر مسدود کننده پردازش کند.
- برنامه های مبتنی بر API REST: جاوا اسکریپت هم در فرانت اند و هم در بک اند سایتها قابل استفاده است. بنابراین یک سرور میتواند به راحتی با استفاده از js از طریق APIهای REST با فرانت اند ارتباط برقرار کند. Node.js همچنین بستههایی مانند Express.js و Koa را ارائه میدهد که این موارد ساخت برنامههای وب را آسانتر می کند.
Node.js فرانت اند است یا بک اند؟
یک تصور غلط رایج در بین توسعه دهندگان این است که Node.js یک فریم ورک Backend است و فقط برای ساخت سرور استفاده میشود. در صورتی که اینطور نبوده و Node.js را میتوان هم در فرانت اند و هم در بک اند استفاده کرد. همچنین برخی تصور دارند که نود جی اس یک زبان برنامه نویسی یا فریمورک است. در صورتی که اینگونه نیست و همانطور که اشاره کردیم نود جی اس یک محیط زمان اجرا است که برای اجرای جاوا اسکریپت در خارج از مرورگر استفاده میشود. به طور خلاصه Node.js نه یک زبان برنامه نویسی است و نه یک فریمورک. این تنها محیطی برای اجرای جاوا اسکریپت است.
چه جاهایی از نود جی اس استفاده کنیم؟
از جمله مواردی که Node.js در آنها به عنوان یک پلتفرم کارا در نظر گرفته میشود، میتوان به موارد زیر اشاره کرد:
- نرمافزارهای جریان دادهای (Data Streaing)
- نرمافزارهای محدوده I/O (ورودی و خروجی)
- برنامههای مبتنی بر JASON API
- برنامههای تک صفحهای
- دادههای نرمافزارهای بلادرنگ (Real-Time)
در کنار این موارد بهتر است توجه داشته باشید که استفاده از این پلتفرم برای برنامههای متمرکز بر CPU توصیه نمیگردد.
جمع بندی
نود جی اس، یک پلتفرم سمت سرور مبتنی بر موتور جاوا اسکریپت گوگل کروم یا همان V8 Engine است. این پلتفرم تمام چیزهایی که برای اجرای یک برنامه نوشته شده به زبان جاوا اسکریپت نیاز است را برایتان فراهم میکند. با استفاده از Node.js زبان برنامه نویسی جاوا اسکریپت به جای آنکه در مرورگر اجرا شود، در محیط سرور اجرا میگردد. برنامه نویسان در این محیط میتوانند به سادگی برنامههای تحت شبکه بزرگ و مقیاس پذیر را بنویسند.