مقدمه
یک برنامه تحت وب را تصور کنید که در هر ثانیه صدها درخواست را در ثانیه به سرور ارسال می کند که قبل از انتقال به درخواست دیگر، هر بار فقط یک درخواست را پردازش کند! احتمالا با مشکلات عملکردی روبرو خواهید شد و تجربه بدی را برای کاربران خود فراهم می سازید.
Node js در سال 2009 توسط Ryan Dahl توسعه دهنده وب ایجاد شد چرا که در هنگام توسعه به جریان ورودی خروجی های شدید و برنامه نویسی همزمان و سیستم عامل های چند رشته در سمت سرور با مشکلات شدید روبرو شد.
بنابراین نود جی اس فناروی است برای حله مقابله با رویدادهای ورودی و خروجی (intense I/O) ناهمزمان شدید، خب بهترین زبان که ظرفیت این کار را دارد نیز #جاوااسکریپت است.
خب در این مقاله من قصد دارم تجربه شخصی خودم و مطالعاتی که در مورد این زبان مدرن سمت سرور را دارم با شما به اشتراک بگذارم و سوالات و چرایی های که افراد میخواهند از این زبان استفاده کنند را جواب بدهم.
۱. نود جی اس چیست ؟
به زبان ساده بخواهم برایتان بگویم یک محیط اجرایی منبع باز جاوا اسکریپت برای برنامه نویسی سمت سرور است که بر روی موتور Chrome's V8 JavaScript ساخته شده است، به این معنی که موتور جاوا اسکرپیت را در مروگر وب کامپایل می کند و همانطور موتور نود جی اس را در آن اجرا می کند.
چنین هسته ای در کنار مروگر باعث می شود برنامه های تحت وب که با نود جی اس نوشته شده است با سرعت بالا اجرا بشوند.
۲. چرا نود جی اس ؟
نود جی اس یک محیط اجرایی قدرتمند برای توسعه برنامه های مدرن وب در سمت سرور می باشد! این زبان بخاطر پایدار بودن و قابل اعتماد بودن مورد توجه شرکت های جهانی از قبیل : Netflix, Uber, LinkedIn and PayPal .
معماری های رویداد محور به دلیل ویژگی های تک رشته ای (Single-Thread) همراه با یک پلتفرم چند رشته ای (Multi-Thread) که در پس زمینه اجرا می شود این زبان برای برنامه های با ورودی و خروجی (intense I/O) شدید بسیار مناسب است که این امر باعث بهبود عملکرد و کمتر شدن سخت افزار برای خدمات به مشتریان می شود.
2.1 Non-Blocking I/O
روش غیر مسدود کردن (Non-Blocking) یک ورودی را دریافت کرده و خروجی را به صورت ناهمزمان برمی گرداند، این عمل برای سرور این امکان فراهم می کند که بتواند تعداد زیادی درخواست را بدون مسدود کردن برنامه دریافت کند، در حالی که پاسخ در پس زمینه پردازش می شود.
2.2 Single Thread
نود جی اس همزمان با بسیاری از رویدادها با ویژگی تک رشته ای که خود عملیات ناهمزمان را به یک پلتفرم چند رشته ای منتقل می کند می تواند برخورد کند، این بدین معنا می باشد که فقط یک نخ قادر است ورودی ها و خروجی ها را مدیریت کند.
این ویژگی با استفاده از حافظه کم و ظرفیت زیر ساختی برای پردازش تعداد زیادی از درخواست ها آن را سبک، مقایس پذیر و کارامد می کند.
۲.۳ Event Driven
نود جی اس یک فناوری رویدادگرا است، بدین معنی که جریان کنترل این سرور توسط وقوع رویدادها هدایت می شود.
بنابراین در لحظه که یک برنامه تحت Node شروع به کار می کند یک شنونده رویداد به نام Event Loop شروع به انتظار رویداد می کند و تا خاموش شدن برنامه متوقف نمی شود. به عنوان مثال یک پیشخدمت رستوان که در هر لحظه آماده دریافت سفارش مشتری تا زمان بسته شدن رستوران باشد.
تصویری که در پایین مشاهد می کنید چرخه حیات رویداد مشخص می کند.
۲.۴ Node Package Manager
Node Package Manager بزرگ ترین کتابخانه متن باز در جهان است تمام ابزار های که برای برنامه در حال توسعه خود با نود جی اس نیاز دارید را میتوانید توسط آن نصب و استفاده کنید و حتی اگر بخواهید میتوانید بسته های را برای خود توسعه داده و به عنوان یک کتابخانه بر روی آن قرار دهید تا بقیه توسعه دهندگان از آن استفاده کنند.
۲.۵ No Buffering
برنامه های نود جی اس هیچگاه داده ها را بافر نمی کنند، این عمل به طور چشمگیری پردازش و بارگذاری فایل ها، مانند فیلم یا فایل های صوتی را کاهش می دهد، به عبارت دیگر داده ها را به صورت تیکه تیکه خروجی می دهد، بعنوان مثال می توانید یک فیلم را بدون وقغه تماشا کنید.
2.6 Scalable
مقیاس پذیری ویژگی اصلی نود می باشد، زیرا ظرفیت بالایی در رسیدگی به حجم زیادی از درخواست ها را به صورت غیرهمزمان با زیر ساخت کم از طریق معماری آن دارد.
بر روی یک نخ واحد همراه با پلتفرم چند رشته ای کار می کند و به این ترتیب هزاران رویداد همزمان را دریافت و مدیریت می کند.
۳ Architecture Node.js
معماری نود جی اس دارای سه عنصر کلیدی است که مانند یک کارخانه پردازش رویداد باهم دیگر کار می کنند، بنابراین برای درک سهولت و نحوه تعامل این عناصر با یکدیگر یک مثال در نود جی اس میزنم.
فرض کنید یک مشتری چندین درخواست به این برنامه ارسال می کند:
۳.۱ Event Queue
به محض رسیدن این درخواست ها به برنامه، آنها به صف رویداد (Event Queue) می روند، صفی که در آن تمام رویداد های رخ داده در برنامه اتفاق می افتد و در آنجا منتظر ارسال شدن هستند، آنها برای پردازش در چرخه ای به نام Event Loop به سر می برند.
۳.۲ Event Loop
همگامی که یک درخواست (عملیات مسدود سازی) در حلقه رویداد وارد می شود، یک پلتفرم تک رشته ای است که موتر ٰV8 در هسته خود برای کامپایل جاوااسکرپیت اجرا می کند، بعد از آن به پلتفرم Thread Pool واگذار می شود تا در پس زمینه پردازش شود، بنابراین با این جریان معماری نخ اصلی برای رسیدگی به بقیه رویداد ها در دسترس قرار می گیرد.
۳.۳ Thread Pool
یک پلتفرم چند رشته ای است که کتابخانه ای به نام libuv را اجرا می کند و C++ را در هسته خود دارد، درخواست (Blocking Operation) به صورت ناهمزمان در پس زمینه پردازش اجرا می شود تا کامل شود و اماده بازگشت باشد.
نتیجه گیری
امیدوارم این مقاله به شما کمک کنند نه تنها نحوه عملکرد Node.js را درک کنید، بلکه همچنین بدانید چرا نود جی اس به این سرعت رشد کرده و در حال حاضر در اکثر شرکت ها و استارت آپ ها مورد استفاده قرار می گیرد.
در دنیایی مدرن و فوق العاده متصل به هم، فناوری ای که بتواند با زیرساخت های پایین به سرعت مقیاس بندی شود، مطمئناً مهره مهمی است که باید به آن توجه کرد.