امروزه جاوا اسکریپت یکی از محبوب ترین زبان های برنامه نویسی در سطح دنیاست که میلیون ها سایت با استفاده از آن راه اندازی شده اند و یکی از دلایل این محبوبیت امکان استفاده از بستر Node.js است.
بهکارگیری این برنامه باعث می شود تا کدهای تعاملی و پرقدرتی را برای وب سایت ها یا نرم افزارها داشته باشیم.
اگر شما هم به عنوان یک نیروی تازه نفس در حوزه برنامه نویسی قصد دارید با Node.js، عملکرد، ویژگی ها و کاربردهای آن آشنا شوید تا انتهای مقاله همراه ما باشید.
1# Node.js چیست؟
در ابتدا زبان برنامه نویسی JavaScript به طور عمده برای اسکریپت نویسی سمت کاربر (Client) طراحی و ساخته شده بود.
به همین دلیل برنامه نویسان وب مجبور به استفاده از زبان های برنامه نویسی دیگر و فریم ورک های واسطه برای برقراری ارتباط بین المان های سمت بک اند (back-end یا همان سرور) و فرانت اند (front-end یا همان کاربر) بودند.
بعد از مدتی Node.js به عنوان راه حل این مشکل معرفی شد که یک محیط شامل تمام موارد موردنیاز برای اجرای برنامه های نوشته شده با JavaScript است و
به کمک آن هر دو سمت بک اند و فرانت اند با جاوا اسکریپت تولید می شوند.
Node.js یک محیط سمت سرور (Server) متن باز (open-source) و کراس پلتفرم (cross-platform) است؛
به این معنا که از آن می توان در تمام پلتفرم های موجود مثل ویندوز، لینوکس، مک و… استفاده کرد و کدهای آن به صورت رایگان و آزاد در اختیار کاربران قرار گرفته است.
به بیان دقیق تر نود جی اس یک محیط اجرایی برای جاوا اسکریپت سمت سرور است که
بر روی موتور اجرایی V8 جاوا اسکریپت کار می کند و کدهای JavaScript را بیرون از محیط مرورگر وب اجرا می کند.
همانطور که گفته شد Node.js به توسعه دهندگان این اجازه را می دهد که از JavaScript برای اسکریپت نویسی سمت سرور هم استفاده کنند که
باعث تولید شدن صفحه های وب پویا (دینامیک) پیش از ارسال آن به مرورگر کاربر می شود.
از ویژگی های مهم node.js می توان به معماری رویداد محور (Event-driven) و داشتن I/O ناهمزمان (Asynchronous) اشاره کرد.
2# تاریخچه نود جی اس
همه چیز از ایدهای نوآورانه در سال 2009 آغاز شد.
رایان داهل، توسعهدهندهای خلاق، با الهام از ایده اجرای جاوا اسکریپت خارج از مرورگر، پروژه Node.js را آغاز کرد.
هدف او ساخت پلتفرمی بود که بتوان از جاوا اسکریپت برای توسعه سمت سرور نیز استفاده کرد.
یکی از دلایل اصلی موفقیت Node.js، استفاده از موتور V8 گوگل بود.
این موتور قدرتمند، جاوا اسکریپت را به سرعت و کارایی بالا اجرا میکرد، همچنین، رویکرد رویدادمحور Node.js، توانایی مدیریت همزمان تعداد زیادی درخواست را به صورت مؤثر فراهم کرد.
این ویژگی، آن را برای توسعه اپلیکیشنهای وب مقیاسپذیر بسیار مناسب ساخت.
به سرعت جامعهای بزرگ از توسعهدهندگان به دور Node.js شکل گرفت.
این جامعه با ایجاد کتابخانهها، ابزارها و فریمورکهای متنوع، اکوسیستمی غنی را برای Node.js فراهم کرد.
پشتیبانی شرکتهای بزرگ مانند IBM ،Microsoft و Netflix نیز باعث افزایش اعتبار و اعتماد توسعهدهندگان به Node.js شد.
Node.js به سرعت در صنایع مختلف از جمله توسعه وب، ساخت API، توسعه اپلیکیشنهای موبایل و IoT مورد استفاده قرار گرفت.
فریمورکهایی مانند Express.js ،Koa.js و NestJS بر پایه Node.js ساخته شدند و توسعه اپلیکیشنهای وب را بسیار آسانتر کردند.
Node.js امروزه یک پلتفرم بالغ و پایدار است که توسط یک جامعه بزرگ پشتیبانی میشود.
بسیاری از شرکتهای بزرگ از Node.js برای ساخت اپلیکیشنهای خود استفاده میکنند.
با توجه به پیشرفتهای مداوم در Node.js و افزایش محبوبیت آن، میتوان انتظار داشت که در آینده نیز نقش مهمی در دنیای توسعهی وب ایفا کند.
به طور خلاصه، Node.js از یک ایده نوآورانه به یک پلتفرم قدرتمند و محبوب در دنیای توسعهی وب تبدیل شده است.
با توجه به مزایای فراوان و جامعهی فعال آن، میتوان انتظار داشت که Node.js در آینده نیز نقش مهمی ایفا کند.
3# آیا Node.js یک فریمورک است؟
نود جی اس را میتوان به عنوان یک موتور قدرتمند جاوا اسکریپت در نظر گرفت که به توسعهدهندگان اجازه میدهد تا خارج از مرورگر، برنامههای سمت سرور بسازند.
برخلاف تصور رایج، نود جی اس یک فریمورک نیست.
برای درک بهتر این تفاوت، بهتر است به تعریف فریمورک بپردازیم.
یک فریمورک، در واقع یک ساختار از پیش تعریفشده است که شامل مجموعهای از کتابخانهها، ابزارها و قراردادهای کدنویسی است.
فریمورکها به توسعهدهندگان میگویند که چگونه کد بنویسند و چه ساختاری برای پروژه خود انتخاب کنند.
به عبارت دیگر، فریمورکها یک قالب آماده برای ساخت اپلیکیشنها ارائه میدهند.
نود جی اس اما، برخلاف فریمورکها، به توسعهدهندگان آزادی عمل کاملی میدهد.
این محیط اجرا تنها یک بستر برای اجرای کدهای جاوا اسکریپت فراهم میکند و هیچ ساختار از پیش تعریف شدهای را تحمیل نمیکند.
توسعهدهندگان میتوانند با توجه به نیازهای پروژه و سلیقه خود، هر ساختاری که میخواهند برای پروژه انتخاب کنند.
این آزادی عمل یکی از بزرگترین مزایای نود جی اس است.
توسعهدهندگان میتوانند پروژههای خود را با هر ساختاری که میخواهند پیادهسازی کنند؛ اما این آزادی به این معنی نیست که نود جی اس فاقد ابزار و کتابخانه است.
در واقع، اکوسیستم غنی Node.js، شامل تعداد بسیار زیادی کتابخانه و ابزار است که توسعهدهندگان میتوانند از آنها برای ساخت اپلیکیشنهای خود استفاده کنند.
برای مثال، اگر شما بخواهید یک وبسرور ساده بسازید، میتوانید از کتابخانههای داخلی نود جی اس استفاده کنید یا از فریمورکهایی مانند اکسپرس جی اس که بر روی نود جی اس ساخته شدهاند، بهره ببرید. انتخاب با شماست.
به طور خلاصه، نود جی اس یک محیط اجرا است که به شما اجازه میدهد تا با استفاده از جاوا اسکریپت، برنامههای سمت سرور بسازید.
این محیط به شما آزادی عمل میدهد تا ساختار پروژه خود را انتخاب کنید.
در حالی که بسیاری از فریمورکها بر روی نود جی اس ساخته شدهاند؛ اما استفاده از آنها اجباری نیست.
در نهایت، میتوان گفت که نود جی اس مانند یک موتور ماشین است و فریمورکها مانند بدنهی ماشین.
شما میتوانید موتور را در هر بدنهای قرار دهید تا ماشین مورد نظر خود را بسازید.
4# معماری Node.js چیست؟
همانطور که در بخش قبل اشاره شد node.js بر روی موتور V8 کروم اجرا می شود که
کدهای جاوا اسکریپت را به کدهای زبان ماشین تبدیل می کند.
عملکرد کلی برنامه نود جی اس به این صورت است که درخواست های کاربران را تایید می کند و
سپس پاسخ های مربوط را برای آن ها ارسال می کند.
Node.js در زمان کار کردن بر روی درخواست ها از روش مدیریتی تک رشته ای (single thread) استفاده می کند.
رشته یا Thread دنباله ای از دستورالعمل هایی است که سرور نیاز دارد اجرا کند.
این رشته ها به صورت موازی بر روی سرور اجرا می شوند تا اطلاعات موردنیاز چندین کاربر را فراهم کنند.
Node.js یک زبان تک رشته ای مبتنی بر رویداد است که می تواند درخواست های همزمان ارسال شده از سمت کاربران را تنها با یک رشته و بدون نیاز به مسدود کردن آن برای یک درخواست انجام دهد.
عملکرد کلی node.js بر دو مفهوم اصلی استوار است که برای درک بهتر نحوه کارکرد آن به معرفی این مفاهیم می پردازیم.
- ناهمزمان (Asynchronous)
- ورودی/خروجی غیرمسدودکننده (Non-blocking I/O)
1-4# ورودی/خروجی غیرمسدودکننده (Non-blocking I/O)
I/O غیرمسدودکننده به این معنا است که عملکرد سیستم برای چندین درخواست همزمان، بدون مسدود کردن رشته برای یک درخواست انجام می شود.
I/O ها اساسا با سیستم های خارجی مانند فایل ها، دیتابیس ها و… تعامل دارند.
توجه داشته باشید که از Node.js نمی توان برای عملیات های سنگین CPU مثل محاسبات ریاضیاتی و… استفاده کرد؛
زیرا این عملیات ها به صورت تک رشته ای قابل مدیریت کردن نیستند.
2-4# ناهمزمان (Asynchronous)
ناهمزمانی بخش مرتبط با اجرای توابع پاسخ دهنده (callback function) است.
لحظه ای که ما پاسخ سرور دیگر یا دیتابیس را دریافت می کنیم، سیستم ناهمزمان یک تابع پاسخ را اجرا می کند.
توابع پاسخ به محض تمام شدن یک عملیات صدا زده می شوند و علت این اتفاق استفاده node.js از معماری رویداد محور است.
تک رشته موجود با درخواست های ارسال شده کار نمی کند؛ بلکه آن ها را به سیستم دیگری ارسال می کند که
توانایی حل کردن درخواست را دارد و قابل دسترسی برای درخواست های دیگر است.
عملکرد node.js برای این سیستم پاسخ دهی بر مبنای مفاهیم موجود در کتابخانه Libuv تعریف می شود.
(Libuv یک کتابخانه متن باز نوشته شده با زبان C است که بر روی سیستم های I/O و asynchronous متمرکز است)
با استفاده از این کتابخانه دو ویژگی مهم در node.js اجرا می شود:
- Event loop (حلقه رویداد): شامل یک رشته که موظف به مدیریت وظایف ساده مثل اجرای پاسخ ها است.
- Thread pool (استخر نخ): جایی که تعداد مشخصی از رشته ها در آن قرار گرفته اند.
5# روش عملکرد Node.js چیست؟
به بیان ساده عملکرد برنامه نود جی اس مشابه الگوریتم شکل زیر است.
اگر دو کاربر 1 و 2 (Client 1 , 2) همزمان دو درخواست ارسال کنند، این درخواست ها وارد بخشی به نام صف رویدادها (Event Queue) می شوند.
حلقه رویداد (Event loop) یکی از درخواست های موجود در صف رویدادها را برداشته و آن را بررسی می کند.
در صورتی که این درخواست نیازی به مسدود شدن I/O ها نداشته باشد، پاسخ آن را آماده و برای کاربر ارسال می کند.
اگر این درخواست نیاز به مسدود شدن I/O داشته باشد آن را به یکی از رشته های (Threads) موجود در Thread pool می سپارد تا
پاسخ آن را آماده کند و جواب را به حلقه رویداد برگرداند و در نهایت برای کاربر ارسال شود.
6# ویژگی های Node.js چیست؟
تا به اینجا بررسی کردیم که node.js چیست و چطور عمل می کند.
در ادامه قصد داریم به معرفی ویژگی های این برنامه اجرای کد بپردازیم که باعث محبوبیت و گستردگی کاربرد آن شده اند.
- سهولت استفاده و یادگیری: یادگیری و شروع کار با node.js بسیار ساده است و مناسب توسعه دهندگان وب مبتدی می باشد.
- مقیاس پذیری: node.js می تواند تعداد زیادی اتصال همزمان با توان عملیاتی بالا را مدیریت کند.
- سرعت بالا: به علت استفاده از رشته های غیرمسدودکننده، این سیستم بسیار سریع و کارآمد است.
- پکیج های متنوع: مجموعه گسترده ای از پکیج های متن باز از نود جی اس در دسترس کاربران آن است.
- ساختار قوی: Node.js با استفاده از زبان های C و ++C نوشته شده است که
باعث اضافه شدن خصوصیاتی مثل پشتیبانی از شبکه شده است. - چند پلتفرمی بودن: قابلیت استفاده بر روی تمامی پلتفرم ها برای ساخت وب سایت ها، برنامه های ویندوز و حتی موبایل را دارد.
- قابل نگهداری بودن: یک انتخاب مناسب برای توسعه دهندگان است؛
زیرا هر دو سمت بک و فرانت یک سایت را با یک زبان جاوا اسکریپت مدیریت می کند. - بدون بافر بودن: در برنامه های node.js هرگز داده ها بافر نمی شوند.
7# کاربردهای Node.js چیست؟
پس از شناخت پیدا کردن درباره اینکه node.js چیست و چه ویژگی هایی دارد، یکی از سوال هایی که همواره برای برنامه نویسان تحت وب ایجاد می شود این است که از node.js کجا می توانیم استفاده کنیم و چه کاربردهایی دارد؟
در ادامه به معرفی برخی از حوزه هایی که می توان در آن ها از node.js استفاده کرد می پردازیم:
- اپلیکیشن های تک صفحه ای وب (SPA)
- برنامه های ارتباط و گفتگوی آنلاین (Real-time chats)
- اینترنت اشیا (IOT)
- جریان داده ها یا استریمینگ داده (Data streaming)
- برنامه های مبتنی بر API های JSON وREST
- پلتفرم های شبکه اجتماعی (Social Media)
- پردازشگرهای پرداخت آنلاین (Online Payment)
- ابزارهای اشتراکی از راه دور (Remote Collaboration)
- ابزارهای مدیریت ارتباط با مشتری (CRM)
- سیستم های مدیریت محتوا (Content Management System)
- پلتفرم های آموزش الکترونیکی (E-Learning)
- پلتفرم تجارت الکترونیک (E-Commerce)
- ابزارهای مدیریت پروژه (Project Management)
- برنامه های مبتنی بر لوکیشن (Location-Based)
- ابزارهای ERP
- برنامه های دسکتاپ
- برنامه های بک اند موبایل
- سرویس های مدیریت سرور (Server Management Services)
- سرورهای DNS سفارشی
- توسعه سمت کلاینت و سرور بازی ها
8# معایب Node.js
علی رغم تمامی کاربردها و ویژگی های منحصر به فرد و فوق العاده، این بستر برنامه نویسی بک اند و فرانت اند به زبان جاوا اسکریپت هم مانند هر سیستم دیگری معایبی نیز دارد.
از جمله معایب اصلی این سیستم می توان به موارد زیر اشاره کرد:
- کاهش کارایی در زمان مدیریت وظایف بسیار سنگین (Heavy Computing Tasks)
- داشتن تغییرات بسیار در کدها به علت ناپایداری API آن (Unstable API)
- عدم پشتیبانی از کتابخانه ها (Lack Of Library Support)
- وابستگی به برنامه نویس های باتجربه (High demand for experienced resources)
- دشواری ویرایش کدها به علت مدل اجرایی ناهمزمان (Asynchronous Programming Model)
9# سوالات متداول درباره نود جی اس
در ادامه مقاله node.js چیست قصد داریم چند سوال بسیار پرتکرار در این حوزه را پاسخ دهیم.
1-9# آیا Node.js یک زبان برنامه نویسی است؟
خیر؛ Node.js یک پلتفرم یا بستر برای اجرایی شدن برنامه های نوشته شده با زبان برنامه نویسی JavaScript است.
2-9# چه کسانی از Node.js استفاده می کنند؟
با توجه به کاربردهای گسترده معرفی شده برای برنامه Node.js امروزه کاربران بسیاری در حال استفاده از آن هستند.
از جمله معروف ترین سایت هایی که برای ساخت و اجرا از این سیستم استفاده می کنند شامل موارد زیر است:
- Paypal و eBay
- Netflix
- Uber
- Github
- Medium
- Trello
سخن پایانی
در این مقاله به پاسخ سوال node ls چیست و معرفی محیط اجرای کدهای جاوا اسکریپت پرداختیم و
با عملکرد، معماری و زیر ساخت، ویژگی های فوق العاده و کاربردهای آن آشنا شدیم و
همچنین عیوبی که برنامه نویسان حرفه ای برای آن برمی شمارند را مطرح کردیم.
شما به عنوان یک برنامه نویس با توجه به اهدافتان از برنامه نوشته شده و ویژگی های مطرح شده برای Node.js می توانید انتخاب کنید که آیا این ابزار مناسب برای کار شما هست یا خیر.
در صورتی که تمایل به انتخاب این بستر اجرایی را برای برنامه هایتان دارید، می توانید شروع به یادگیری کنید و
به یکی از برنامه نویسان خبره در این حوزه تبدیل شوید.
نظرتون درباره این مقاله چیه؟
ما رو راهنمایی کنید تا اون رو کامل تر کنیم و نواقصش رو رفع کنیم.
توی بخش دیدگاه ها منتظر پیشنهادهای فوق العاده شما هستیم.