شما اینجا هستید :

Home » مقالات » توسعه سمت سرور » Node.js (نودجی‌اس) چیه؟

Node.js (نودجی‌اس) چیه؟

Node.js یه محیط سمت سرور برا اجرای کدهای JavaScript هستش. Nod.js یه محیط اجرای جاوااسکریپتیه، که روی موتور اجرای کد جاوااسکریپته مرورگر کروم تحت عنوان V8 ساخته شده. Node.js در سال ۲۰۰۹ متولدشده، یه پلتفرمه نه یه کتابخونه یا یه فریم ورک جدید مربوط به زبان‌های برنامه‌نویسی که تازه کشف شده باشه.
Node Run-time Environment (محیط اجرای نُود) همه قابلیت‌هایی رو شامل میشه که یه دولوپر(توسعه دهنده) جاوااسکریپت برای اجرای اسکریپت‌های خود نَه در سمت فرانت‌اند(کاربر)، بلکه در سمت بک‌اند (سرور) به اونا نیاز داره. در حقیقت، Node.js در نتیجهٔ تلاش‌های دولوپرهای زبان جاوااسکریپت برای توسعۀ محیطی به وجود اومده که دولوپرها بتونن کدهای جاوااسکریپتی خودشون رو علاوه بر مرورگر در سمت سرور هم تو قالب یه اپلیکیشن مستقل اجرا کنن.با این قابلیت توسعه دهنده ها می‌تونن علاوه بر طراحی وب‌سایت‌های تعاملی با زبان #جاوااسکریپت، برای توسعهٔ سایر اپلیکیشن‌ها هم از این زبان استفاده کنن. هر دو محیط اجرای جاوااسکریپت (سمت کاربر و سمت سرور ) روی موتور جاوااسکریپت تحت عنوان V8 اجرا میشن.  موتور V8 کدای جاوااسکریپت رو میگیره و اونا رو به یه اسکریپت قابل‌فهم برا ماشین تبدیل می‌کنه (کد قابل‌فهم برای ماشین یه کد اصطلاحاً Low Level یا سطح پایینه که کامپیوتر میتونه بدون اینکه بخواد اونو تفسیر کنه خیلی سریع اونو اجرا میکنه). V8 یک موتور اپن‌سورس برای اجرای کدای جاوااسکریپته که با زبان ++C نوشته شده که مثل یه توربین با به‌ کارگیری زبان ++C موجب افزایش کارایی در خروجی کد جاوااسکریپت میشه.V8 استانداردی تحت عنوان ECMAScript که سازمان بین‌المللی Ecma به منظور استانداردسازی زبان جاوااسکریپت اون رو ساخته پیاده سازی میکنه. این موتور میتونه کدها رو به صورت مستقل اجرا کنه همچنین میتونه توی  بقیه اپلیکیشن‌های نوشته شده با ++C هم اِمبدد بشه. به عبارت دیگر، دولوپرها میتونن کدشونو به زبان ++C بنویسن، این در حالی که امکان اجرای اون تو محیط اجرای کدهای جاوااسکریپت و همچنین نوشتن کد به زبان جاوااسکریپت هم ممکنه. این مسئله باعث میشه تا دولوپرها با اِمبدد کردن موتور V8 تو کد نوشته شده با زبان سی‌پلاس‌پلاس خود، فیچرهایی را به زبان جاوااسکریپت اضافه کنن تا این کد قابلیت‌های بیشتری نسبت به سایر استانداردهای مشخص‌شده در ECMAScript را داشته باشه.برای نود جی اس تعاریف دیگه اییم ارائه شده که بهشون اشاره میکنم:

نودجی‌اس از مُدلی پیروی می‌کنه که مبتنی بر رویداده (Event-driven) و همچنین این مدل فرآیندهای ورودی و خروجی (I/O) را اصلاً بلاک نمیکنه به طوری که استفاده از چنین مدلی باعث سَبکی و کارآمدی محیط اجرای نودجی‌اس شده.

 Blocking I/O و Non-blocking I/O
I/O به درخواست‌های ورودی و خروجی از یک سیستم اشاره میکنه و فرآیندهای گوناگونی را در بر میگیره که از اون جمله میتونیم به فرآیندهای به اصطلاح Read یا Write (به ترتیب به معنی خواندن و نوشتن) روی یکسری فایل سیستمی یا ارسال یک ریکوئست (درخواست) از نوع HTTP به یک API اشاره کنیم. معمولاً چنین ریکوئست‌هایی زمان‌ برن. لذا سیستم در هنگام دریافت درخواست‌هایی از جنس I/O، فانکشن‌های دیگه رو بلاک (مسدود) میکنه تا بتونه در کمترین زمان ممکن پاسخ مناسبو به این درخواستا بده.

فرض کنین

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

حال فرض کنین که ارسال ریکوئست و دریافت ریسپانس از دیتابیس بر طبق فرآیند Blocking I/O (مسدود کردن ورودی/خروجی) انجام میشه، تو این روش به ریکوئستی که برای دریافت دیتای کاربر دوم ارسال شده داده پاسخ داده نمیشه  مگه  اینکه که کار ریکوئست اول تموم شده باشه که این اصلاً خوب نیس.

اگه همچین ریکوئستی به سرور ارسال بشه باید به ازای هر ریکوئست برای دریافت دیتای مربوط به هر کاربر، یه به اصطلاح Thread جدید ایجاد بشه. اما زبان جاوااسکریپت یک زبان به اصطلاح Single-threaded (تَک‌ تِرِدی) بحشاب میاد؛ پس برای تَسک‌هایی که درخواستشون به یه وب سرور ارسال میشه و نیاز به اجرا به صورت به اصطلاح Multi-threaded (چند تِرِدی) دارن، زیاد مناسب نیس.

(البته زبان جاوااسکریپت  یه زبان کاملاً تک‌تِردی نیس اما یه Event Loop داره که به صورت تَک‌ تِرِدی اجرا میشه)

با توجه به شرایطی که گفته شد سؤالی که پیش میاد اینه که تو زبان جاوااسکریپت درخواست‌های هم‌زمان چجوری اجرا میشن؟ خب برای جواب دادن به این پرسش این فرآیند رو معرفی میکنم که به روش Non-blocking I/O (مسدود نکردن درخواست‌های ورودی/خروجی) اجرا میشه و برای انجام درخواست‌های همزمان خیلی بکار میاد.

به عنوان مثال، با به‌کارگیری فرآیندهایی که تو اون یکی از چند درخواست هم‌زمان بلاک نمیشن، سیستم می‌تونه یه ریکوئست رو برای دریافت دیتای مربوط به کاربر شماره دو آغاز کنه، بدون اینکه منتظر دریافت جواب مربوط به دیتای کاربر شماره یک بمونه. در واقع، سیستم هر دو درخواست رو به صورت موازی اجرا میکنه و در کوتاه‌ترین زمان ممکن جواب رو به کاربرا ارسال میکنه تو این حالت دیگه نیازی به تَسک‌ها به صورت چند تِردی نیس چرا که سرور میتونه چندین درخواست رو به صورت همزمان هَندل کنه.

Event Loop در جاوااسکریپت
هر چیزی که تو اپلیکیشن اتفاق میفته و دولوپر میتونه به اون پاسخ بده اصطلاحا Event میگن. به طور کلی دو نوع ایونت (رویداد) در پلتفرم نودجی‌اس وجود داره:

– ایونت‌های سیستمی: این‌ نوع از ایونت‌ها در هستهٔ ++C و در نتیجۀ فراخوانی یک لایبرری تحت عنوان libuv اتفاق میفته (به عنوان مثال، تموم شدن فرآیند Read یه فایل).
– ایونت‌های سفارشی شده: این دست از رویدادها در هستۀ جاوااسکریپت اتفاق میفتن.

 پَکیج مَنجر NPM
NPM مخفف ۳ کلمه Node Package Manager هستش، پَکیج مَنجر نود‌جی‌اس شامل مجموعه‌ای از لایبرری‌هاییه که با مشارکت کامیونیتی بزرگی از دولوپرهای جاوااسکریپت توسعه پیدا کرده و پاسخی به نیازهای بسیاری از مسائل دولوپرهاس.

آشنایی با ماژول‌های پلتفرم Node.js
یک ماژول در نُود بلوکیه که کد با قابلیت استفادهٔ مجدد داره و اجرای این بلوک از کد بر روی کدهای دیگر تأثیر نمیذاره. همچنین دولوپرها میتونن ماژول‌های خودشون رو بنویسن و از اونا رو تو برنامه های مختلف استفاده کنن این در حالیه که خودِ پلتفرم نودجی‌اس از مجموعۀ ماژول‌های مختلفی تشکیل شده که دولوپرا می‌تونن بدون اینکه نصبش کنن از اونا استفاده کنن.

 

مــطالب مشـــابه

تفاوت میان برنامه‌نویسی شئ‌گرا و تابعی

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

ارسال شده در شهریور ۷, ۱۳۹۷

جوملا چیه؟

جوملا یه سیستم مدیریت محتوای تحت وبه که مدیریت و انتشار مطالب رو به شکل ساده امکان پذیر میکنه، جوملا امکانات گسترده ایی و با ابزار های خودش امکان گسترش نرم افزارها رو فراهم میکنه. با جوملا میتونین وبسایت ها و سامانه های تحت وب…

ارسال شده در شهریور ۶, ۱۳۹۷

عناصر مهم در ایجاد یک وبسایت فوق العاده

چطوری میتونیم یه وبسایت عالی داشته باشیم؟ هیچ دستور جادویی و یا الگوی خاصی برای حل این سوال وجود نداره. داشتن یه وبسایت فوق العاده میتونه به عوامل و فاکتور های مختلفی بستگی داشته باشه، مثلا مهارت شما یا بودجه ای که در اختیار دارین…

ارسال شده در شهریور ۴, ۱۳۹۷

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *