نود جی اس ، یک فریمورک تمام عیار!

معرفی نود جی اس

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

نود جی اس یک محیط run time است که میتوانید با کمک زبان جاوا اسکریپت، در آن کدهای سمت سرور بنویسید. این محیط شامل تمام اجزایی میشود که شما برای اجرای کدهای جاوا اسکریپت به آن‌ها نیاز دارید.

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

معرفی نود جی اس

برای فهم بهتر تصویر بالا باید کمی از جاوا اسکریپت بدانید. جاوا اسکریپت در بدو تولد برای ایجاد صفحات پویای وب ایجاد شد. در واقع تا سالهای متمادی از جاوا اسکریپت در برنامه نویسی سمت کاربر استفاده میشد.

سوالی که پیش می‌آید این است: در این شرایط کدهای جاوا اسکریپت در کجا اجرا میشدند؟ مرورگرها! در واقع مرورگرها به کمک موتور جاوا اسکریپت که در آن‌ها تعبیه شده است کدهای جاوا اسکریپت را اجرا میکنند. هر مرورگر موتور جاوا اسکریپت مخصوص خودش را دارد که کدهای سطح بالای جاوا اسکریپت را دریافت میکنند و به زبان ماشین که یک زبان سطح پایین و قابل فهم برای کامپیوتر است، تبدیل میکنند. معروفترین موتور جاوا اسکریپت، v8 است که در مرورگر کروم تعبیه شده است.

دوره های اموزشی برنامه نویسی

در سال ۲۰۰۹ با معرفی نود جی اس انقلابی رخ داد. حالا برنامه نویسان جاوا اسکریپت علاوه بر نوشتن کدهای سمت کاربر، میتوانستند کدهای سمت سرور نیز بنویسند. [wpdiscuz-feedback id=”6l14vvl1og” question=”میدونید که برای ما مهم هستید! اینجا بنویسید…” opened=”0″]اما چطور ممکن بود؟ چطور ممکن بود جاوا اسکریپت با جایی خارج از مرورگر (مثل دیتابیس) ارتباط برقرار کند و در جایی خارج از مرورگر( نود جی اس) اجرا شود؟[/wpdiscuz-feedback]

به کمک v8‌! در واقع v8‌ را که قویترین موتور جاوا اسکریپت است، در یک برنامه که به زبان c++ نوشته شده است، تعبیه کرده‌اند. این برنامه خارج از محیط مرورگر نیز قابلیت اجرا شدن دارد. پس حالا امکان اجرای کدهای جاوا اسکریپت در خارج از محیط مرورگر فراهم شده است.

معرفی نود جی اس ، ویژگی‌ها:

run time‌:

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

Non-blocking I/O :

I/O مخفف input/output یا ورودی/خروجی است. به کارهایی مثل خواندن داده از روی دیسک، درخواست گرفتن اطلاعات از دیتابیس، ارتباط برقرار کردن با یک وب سرور دیگر گفته میشود.( یا به طور خلاصه، دسترسی به هر چیزی خارج از برنامه)

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

ویژگی های فریمورک معروف جاوا اسکریپت

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

فرض کنید خواندن اطلاعات از دیتابیس ۶۰۰ms طول میکشد و مرورگر ۱۰۰ms زمان نیاز دارد تا داده‌ها را به کاربر نمایش دهد.

میخواهیم این سناریو را بررسی کنیم: سایت فیسبوک ۲ بازدید کننده دارد که میخواهند پروفایلشان را مشاهده کنند. بازدید کننده دوم، ۱ms‌ بعد از بازدید کننده اول در خواستش را ارسال میکند.

Blocking io

اگر زبان برنامه نویسی و فریمورک ما Blocking io باشد: کاربر اول با گذشت ۷۰۰ms پروفایلش را مشاهده میکند. کاربر دوم اما (۷۰۰+۷۰۱)ms بعد پروفایل خود را میبیند. در واقع ۷۰۰ms‌ منتظر میماند تا درخواست کاربر اول تمام شود. یک میلی ثانیه درخواستش را با تاخیر ارسال کرده است( نسبت به کاربر اول)‌ و در نهایت پردازش درخواست خودش هم ۷۰۰ms طول میکشد.

حالا همین سناریو را برای ۱۰۰۰ کاربر تصور کنید. کاربر ۱۰۰۰ام چند ms‌ باید منتظر باشد تا درخواستش انجام شود؟ این میزان انتظار واقعا خوشایند کاربر نیست.

در این مرحله نود جی اس با یک ویژگی خارق‌العاده پا به صحنه میگذارد:

Non-Blocking I/O‌ : اگر سرور بتواند درخواست کاربر اول و دوم را همزمان پردازش کند، مشکل زمان حل میشود. در واقع به جای پردازش request‌ها به صورت یکی پس از دیگری،‌ آنها را به صورت موازی پردازش می‌کند. نود جی اس همچین امکانی را برای ما فراهم میکند اما باید توجه داشته باشید نحوه نوشتن کد در استفاده از این ویژگی خیلی مهم است.

فریمورک

Event loop‌:

وقتی کاربر یک request‌( درخواست) به سرور ارسال میکند، میگوییم یک event‌ اتفاق افتاده است.

وقتی یکسری event غیرهمزمان(asynchronous‌) داریم، نود جی اس باید بداند کدام event‌ اول اتفاق افتاده است و به چه ترتیبی باید اجرا شوند. این با کمک event loop اتفاق میوفتد.

معرفی node js

Call stack بخشی از زبان جاوا اسکریپت است اما node apis و callback queue را نود جی اس در اختیار ما قرار میدهد. حالا میخواهیم بررسی کنیم وقتی یک کد ( مثلا کد بالا) اجرا میشود، چه اتفاقی میوفتد؟

  1. ()Main برنامه داخل استک پوش(push ) میشود
  2. با رسیدن به خط ۱ log(‘starting app’) ، این کد در استک پوش میشود. بعد از چاپ رشته مورد نظر در کنسول ، console.log(‘starting app’) از استک پاپ میشود.
  3. حالا setTimeout‌ در استک پوش میشود. این خط بیانگر آن است که با گذشت ۲ ثانیه، باید رشته مورد نظر در خروجی چاپ شود. اما برنامه ۲ ثانیه را منتظر نمیماند. setTimeout‌ را از استک پاپ کرده و به Node APIS میفرستند. در این بخش تایمری فعال میشود تا ۲ ثانیه یا ۲۰۰۰ms‌ را میشمارد
  4. در گام بعدی setTimeout‌ دوم در استک پوش میشود. آن هم از استک پاپ و به Node APIS فرستاده میشود. چون صفر ثانیه باید بگذرد،‌پس بلافاصله به callback queue‌ ارسال میشود. وظیفه callback queue‌ این است که چک کند آیا استک خالی است یا نه؟ اگر استک خالی باشد از سر queue‌ یک تسک به استک ارسال میکند. در نتیجه در این بخش setTimeout‌ دوم به استک ارسال میشود. بعد از اجرا شدن و چاپ رشته مورد نظر در کنسول،‌ از استک پاپ میشود.
  5. حالا کار تایمر setTimeout‌ اول به پایان رسیده است و دو ثانیه گذشته است. setTimeout‌ اول نیز راه setTimeout‌ دوم را طی میکند و اجرا میشود و در نهایت از استک پاپ میشود
  6. در نهایت هم ()main‌ از استک پاپ میشود و اجرای برنامه به پایان میرسد.

Npm‌:

Npm‌ مخفف عبارت node package manager‌ است. وقتی میخواهید یک برنامه نود جی اس بنویسید،‌ لازم نیست تمام کدها را از صفر بنویسید. در واقع برای ساخت ماشین نیاز نیست چرخ را اختراع کنید.

از قبل برنامه‌نویسانی از کامیونیتی نود جی اس، کدهایی نوشته‌اند و در غالب پکیج منتشر کرده‌اند. این پکیج‌ها در یک مخزن به اسم npm نگهداری میشوند. شما میتوانید با دانلود این کدها ازشان استفاده کنید.

Npm بزرگترین مخزن پیکیج‌ کدهای نوشته شده است که به صورت رایگان در اختیار کاربران قرار میگیرد.

Single thread‌:

جاوا اسکریپت یک زبان برنامه نویسی Single thread است. یعنی جاوا اسکریپت یک stack‌ دارد و در هر لحظه میتواند فقط یک کار را انجام دهد. از آنجایی که نود جی اس از جاوا اسکریپت استفاده میکند، پس این ویژگی‌ها شامل نود جی اس نیز میشود.

Cross platform :

قابلیت پیاده سازی بر روی تمام سیستم عامل‌ها را دارد و از این بابت هیچ محدودیتی برای شما ایجاد نمیکند.

Open source:

نود جی اس یک کامیونیتی open source‌ دارد. پس همه میتوانند هر ویژگی که میخواهند را به صورت یک ماژول نوشته و به نود جی اس اضافه کنند.

Free‌:

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

کلام پایانی

در این مقاله تمام سعی‌ام بر این بود که به معرفی نود جی اس به صورت مختصر اما مفید بپردازم. امیدوارم که به هدفم رسیده باشم.

اگر سوال یا نظری درباره نود جی اس،‌ برنامه نویسی آن یا بخش‌های مختلفش دارید، با من و سایر خوانندگان این مقاله در میان بگذارید. حتما به سوالات شما پاسخ خواهیم داد.

برای اطلاع از آخرین تخفیف ها و دوره‌های آموزشی و مطالب مختلف به روز ما، در کانال تلگرام ‌چ‌ یاب عضو شوید.

منابع:

مهندس کامپیوتر👩‍💻 | علاقه‌مند به برنامه نویسی💻| دیجیتال مارکتینگ📱| بسکتبال🏀| تولید محتوا🖋