نود جی اس (Node.js) چیست؟ ...
دیگر نیازی نیست برای نوشتن کدهای بکاند زبان جدیدی را یاد بگیرید؛ چون Node.js اینجا است تا کار شما را راحت کند!
همین اول کار، خیلی خلاصه و سرراست بگوییم که به کمک این ابزار، میتوانید برای نوشتن کدهای سمت سرور هم (بکاند) از همان زبان جاواسکریپت استفاده کنید؛ اما هم شما دنبال اطلاعات بیشتر هستید و هم ما دلمان به این خلاصۀ کوتاه رضا نمیدهد!
پس بیایید برویم سراغ کندوکاو این موضوع و به جوانب مختلف آن بپردازیم؛ منتهی لازم است ابتدا بدانید Node.js چیست.
Node.js چیست؟
مفهوم کدهای فرانتاند و بکاند را میدانید؟ برای اینکه بتوانیم پاسخ کاملی به پرسش node.js چیست بدهیم، لازم است اول نگاهی کوتاه به تعریف آنها داشته باشیم:
کدهای فرانتاند: کدهایی که در مرورگر کاربر اجرا میشوند.
این دسته از کدها کاری میکنند المانهای تعاملپذیر به چشم بیایند و بازدیدکننده بتواند از آنها استفاده کند.
کدهای فرانتاند معمولاً با زبان برنامهنویسی JavaScript نوشته میشوند.
کدهای بکاند: این کدها به امور پشت صحنه ربط دارند؛ به بیان سادهتر، کدهایی که روی سرور اجرا میشوند به کدهای بکاند موسوم هستند.
کارهایی مثل مدیریت چگونگی ذخیره کردن دادهها و ارسال رفتوبرگشتی اطلاعات به کدهای فرانتاند، بر عهدۀ این دسته از کدها است.
کدهای بکاند را میتوان با زبانها برنامهنویسی مختلفی نوشت؛ مثلاً پایتون یا جاوا.
حالا که با این دو مفهوم آشنا شدید، بیایید ببینیم نود جی اس چیست.
Node.js ابزار ویژهای است که اجازه میدهد برای نوشتن کدهای بکاند هم از زبان برنامهنویسی جاوااسکریپت استفاده کنید!
بنابراین، آنهایی که نوشتن دستورات با این زبان مشهور را بلد هستند، میتوانند با دستورات همان زبان کدهای سمت سرور را هم بنویسند و دیگر نیازی نیست برای یادگیری یک زبان کاملاً جدید وقت بگذارند.
اگر بخواهیم از دیدگاهی فنیتر به ماجرا نگاه کنیم و پاسخی تخصصیتر به سؤال Node.js چیست بدهیم، باید بگوییم با محیطی متنباز (Open-source) طرف هستیم که کراس پلتفرم محسوب میشود؛ یعنی امکان استفاده از آن روی سیستمعاملهای مختلف مثل ویندوز، لینوکس و مک وجود دارد.
نکتۀ خیلی مهم: معمولاً، کدهای نوشتهشده با JavaScript فقط در مرورگرها اجرا میشوند؛ منتهی Node.js این امکان را فراهم میکند که کدهای نوشتهشده با این زبان را در خارج از مرورگر هم اجرا کنیم؛ مثلاً روی یک سرور!
ضمناً، باید بدانید که این ابزار کتابخانهای کامل از تمام ملزومات ساخت وباپلیکیشن با JavaScript را هم فراهم میکند که فرایند ساخت اپلیکیشنهای تحت وب را تسهیل میکند.
در سال ۲۰۱۹، فردی با نام Ryan Dahl این ابزار را توسعه داد و طی بیشتر از ۱۰ سال گذشته، بسیاری از برنامهنویسها سراغ آن رفتهاند؛ برنامهنویسهایی که میخواهند وباپلیکیشنهای سمت سرور بسازند. توجه داشته باشید که این ابزار، خیلی به کار آن دسته از برنامههایی میآید که با دادههای بسیار حساس سروکار دارند ؛ چون با مدل خاصی که کاملاً نامنتقارن است کار میکند.
پس بهطور کلی، آنهایی که در زمینۀ توسعۀ وب فعالیت دارند، Node.js را گزینهای ایدئال میبینند؛ چراکه میتوانند کدهای هر دو سمت را با همان زبان JavaScript بنویسند.
حالا که پاسخ پرسش اصلی مقاله را گرفتهاید، بیایید جلوتر برویم و جوانب مختلف این ابزار کارآمد را کندوکاو کنیم.
مثلاً بیایید ببینیم روال کار این ابزار به چه ترتیبی است.
سازوکار Node.js چگونه ست؟
در مقایسه با وبسرورهای سنتی، نود جی اس سازوکاری کاملاً منحصربهفرد دارد.
اگر احیاناً فکر میکنید باید با چیستی وبسرورها بیشتر آشنا شوید، پیشنهاد ما مطالعۀ مقالۀ “وب سرور چیست؟ آشنایی با Web Server” است.
این ابزار روی موتور V8 JavaScript بنا شده که متعلق به مرورگر Google Chrome است.
V8 JavaScript میتواند کدهای جاوااسکریپت را به کدهایی کامپایل کند که ماشینها خیلی راحت آنها را میفهمند.
برخلاف اغلب وبسرورهای رایج که از چندین Thread استفاده میکنند، نود جی اس کارش را تنها با استفاده از یک Thread انجام میدهد!
نکته: Thread (یا رشته) را میتوان به برنامههای کوچکتر درون یک برنامۀ بزرگ تشبیه کرد.
هدف استفاده از Threadها، تقسیم امور به منظور افزایش سرعت است.
فکر نکنید چون Node.js از تنها یک Thread بهره میبرد، سرعت پایینی دارد.
Node.js یک لوپ گردان دارد که دائماً دنبال رویدادهای (Events) جدید، مثل ثبت درخواست جدید توسط کاربر میگردد.
به همین خاطر، این ابزار میتواند چندین فعالیت را بهصورت همزمان و بدون بلاک کردن عملیاتهای I/O انجام دهد.
وقتی Node.js با تسکی مواجه میشود که انجام آن با کندی صورت میگیرد، منتظر به اتمام رسیدن آن نمیشود.
در عوض، سراغ رسیدگی به درخواستهای دیگر میرود تا آن کار خاص در پسزمینه انجام شود.
در واقع، روال به این صورت است که کاربر درخواستی به سرور نود جی اس میفرستد و این درخواست به صف باقی درخواستها افزوده میشود.
لوپ مدام این صف را بررسی میکند و درخواستهای مختلف را پردازش میکند.
اگر احیاناً درخواستی شامل عملیات I/O باشد، ابزار مورد بحث آن را به کرنل سیستم میفرستد تا بهصورت نامتقارن بررسی شود!
بعد از اتمام عملیات I/O، کرنل نود جی اس را مطلع میکند و اقدامات لازم برای بازگرداندن آن درخواست را انجام میدهد.
همین سازوکار که گفتیم عملیاتهای I/O را بلاک نمیکند و مدلی رویدادمحور دارد، Node.js را قادر میسازد تا بتواند بهصورت همزمان به چندین درخواست رسیدگی کند؛ آن هم بهشکلی کاملاً کارآمد و بهینه.
به همین دلیل، ابزاری که اینجا راجعبه آن صحبت میکنیم، برای ساخت اپلیکیشنهای تحت وب با مقیاسپذیری بالا، بسیار مناسب محسوب میشود.
اپلیکیشنهایی که در نهایت میتوانند عملکرد خیرهکنندهای از خود نشان دهند.
گفتیم کدهای JavaScript ذاتاً برای اجرا روی مرورگرها طراحی شدهاند؛ ولی Node.js فضایی را فراهم میکند که میتوان این کدها را خارج از مرورگرها اجرا کرد.
با این وجود، تفاوتهایی بین محیط این ابزار و مرورگرهای رایج وجود دارند.
محیط Node.js چه تفاوتی با مرورگر دارد؟
اصلیترین شباهت این است که هر دو میتوانند کدهای Node.js را اجرا کنند؛ ولی همانطور که عنوان این بخش نشان میدهد، قرار است به تفاوتها بپردازیم!
دسترسی به DOM API
DOM مخفف Document Object Model است.
این از این!
در محیط مروگرها، امکان دسترسی به DOM وجود دارد؛ درحالیکه نود جی اس چنین امکانی را برای کاربر فراهم نمیکند.
وقتی از این ابزار استفاده میکنید، تقریباً تمام منابع سیستم برای برنامۀ درحال توسعه عیان است! به بیان دیگر، برقراری ارتباط با سیستمعامل ممکن است؛ همچنین به فایلهای سیستم دسترسی دارید و امکان اعمال تغییرات روی آنها هم وجود دارد.
ولی همانطور که احتمالاً خودتان میدانید، مرورگر سیستم شما نمیتواند به فایلهای سیستم (System Files) و سیستمعامل دسترسی پیدا کند.
خرید انواع هاست 🍋
بهترین سرویسهای میزبانی وب را از لیموهاست بخواهید
ما متناسب با نیازهای شما، سرویسهای مختلفی را با سرعت و قدرت فوقالعاده و قیمتهای بهصرفه آماده کردهایم.
شروع قیمت از سالیانه ۵۹۰ هزار تومان
خرید هاست
Window در مروگر و Global در Node.js
زبان برنامهنویسی جاوااسکریپت یک Global Object درونی دارد.
احتمالاً باید مفهوم Global Object را بشکافیم تا بفهمید منظورمان چیست.
Global Object: در این زبان برنامهنویسی، Global Object حکم یک یونیت ذخیرهسازی مرکزی را دارد؛ یونیتی که حاوی متغیرها و دستوراتی است که برنامهنویس در سطوح بالا تعریف کرده و امکان دسترسی به آن از هرجای کد نوشتهشده وجود دارد.
برگردیم به موضوع خودمان و ببینیم تفاوتهای محیط مروگر و Node.js چیست.
Global Object درونی جاوااسکریپت در مروگرها Window نام دارد؛ درحالیکه Node.js این یونیت را با نام global در اختیار کاربر قرار میدهد.
پیشنهاد خواندنی: سیستم عامل لینوکس چیست و چه کاربردهایی دارد؟
کنترل روی ورژنهای Runtime
وقتی با استفاده از نود جی اس کدهای بکاند را مینویسید، میتوانید مشخص کنید اپلیکیشن در سمت سرور با کدام ورژن اجرا شود.
در واقع، میتوانید از جدیدترین قابلیتهای JavaScript بهره ببرید و هیچ مشکلی از بابت ناسازگاریهای مربوط به ورژنی خاص را تجره نکنید.
در نقطۀ مقابل، امکان کنترل ورژن روی مرورگر وجود ندارد؛ یعنی بهعنوان توسعهدهنده، نمیتوانید ورژن مروگر کاربر را مشخص کنید؛ منظورمان همان کاربری است که میخواهید به اپلیکیشن تحت وب شما دسترسی پیدا کند.
پشتیبانی از ماژولها
نود جی اس، پشتیبانی خیلی خوبی از ماژولهای CommonJS و ES ارائه میکند.
روال به این ترتیب است که برای بارگذاری ماژولهای CommonJS میتوانید از کلمۀ کلیدی require استفاده کنید و برای ماژولهای ES از کلمۀ کلیدی import.
در دنیای مرورگرها، برخی از جدیدترینهای آنها، از ماژولهای ES پشتیبانی میکنند.
در نتیجه، میتوانید از import برای بهکارگیری آنها بهره ببرید.
اما اگر از مرورگرهای قدیمیتر استفاده میکنید، باید باندلهایی برای آنها بسازید تا امکان استفاده از این نوع ماژولها فراهم شود.
در بخش بعدی مقاله، به خصوصیتهای ابزار کاربردی Node.js میپردازیم.
NodeJs چه ویژگیهایی دارد؟
تا اینجای مقاله، فهمیدیم Node.js چیست.
ابزاری توانا که امکان نوشتن کدهای سمت سرور (بکاند) با زبان برنامهنویسی JavaScript را فراهم میکند.
حالا در این قسمت، میخواهیم نگاهی بیندازیم به چند مورد از ویژگیهای خاص این ابزار.
پیشنهاد خواندنی: وبسرور آپاچی چیست؟ آشنایی با رقبای Apache HTTP Server
معماری تکرشتهای
بالاتر وقتی طرز کار نود جی اس را بررسی میکردیم، گفتیم که این ابزار فقط از یک Thread استفاده میکند.
بهوسیلۀ لوپی که بهصورت مداوم رویدادها را بررسی میکند، Node.js با یک معماری تکرشتهای کارش را پیش میبرد.
بهخاطر همین شکل معماری، ابزاری مورد بحث مقیاسپذیری خیلی بالایی دارد که جلوتر بیشتر به آن میپردازیم.
این سازوکار Node.js را از باقی انواع سرورها متمایز میکند؛ چون همانطور که گفتیم، رشتههای (Threads) محدودی برای پردازش درخواستها ساخته میشوند.
به دلیل همین مکانیزم رویدادمحور، سرورهای NodeJs بدون بلاک کردن یا بهشکلی نامتقارن پاسخ درخواستها را میدهند که این مورد هم به مقیاسپذیری بیشتر منجر میشود.
اگر بنا به مقایسه باشد، نود جی اس در مقایسه با وبسرورهای سنتیتر مثل آپاچی، توانایی رسیدگی به درخواستها خیلی بیشتری را دارد.
پس در نهایت، معماری تکرشتهای مزایای زیادی بهدنبال دارد که از جملۀ آنها، امکان رسیدگی به حجم زیادی از درخواستها است.
مقیاسپذیری بالا
این روزها، مقیاسپذیری خصوصیتی است که اغلب کمپانیها در نرمافزارهای مختلف دنبالش میگردند.
سازندگان نود جی اس هم خیلی خوب این موضوع را درک کردهاند و توانستند یکی از بزرگترین مشکلات در زمینۀ توسعۀ وب را برطرف کنند.
همانطور که گفتیم، درخواستهای همزمان در Node.js بهشکلی بسیار کارآمد و بهینه پردازش میشوند.
این ابزار از یک مدل خوشهای (Cluster Model) برای تقسیم حجم کار بین تمام CPUهای فعال استفاده میکند.
جالب است بدانید که نود جی اس میتواند اپلیکیشن را بهصورت افقی پارتیشنبندی کند و این یکی از مهمترین قابلیتهای آن محسوب میشود.
این قابلیت بهلطف امکان استفاده از Child Processes مهیا میشود.
با پارتیشنبندی، میتوان نسخههای متفاوتی از اپلیکیشن را برای گروههای مختلف از مخاطبان هدف فراهم کرد.
همچنین، امکان کاستومایز کردن ورژنهای مختلف با توجه به ترجیحات و سلایق هر گروه از کاربران هم وجود خواهد داشت.
سازگاری بالا با انواع سیستمعاملها
در قسمتی که پاسخ پرسش Node.js چیست را میدادیم، گفتیم یکی از مهمترین ویژگیهای آن کراسپلتفرم بودنش است.
یعنی فرقی ندارد سیستم شما با چه سیستمعاملی کار میکند! درهرصورت، میتوانید از این ابزار روی ویندوز، یونیکس، لینوکس، مکاوس و حتی سیستمعاملهای تلفنهای همراه هوشمند استفاده کنید.
بعد از بررسی ویژگیها، اگر موافق باشید، آخرین بخش را به کنکاش مزایای این ابزار اختصاص دهیم.
مزایای استفاده از نود جی اس چیست؟
تا همین جای مقاله، مستقیم و غیرمستقیم، به نقاط قوتهای زیادی از این ابزار اشاره کردیم؛ منتهی چون طبق معمول میخواهیم یک مطلب کامل و مفصل تقدیمتان کنیم، مطلبی که تمام اطلاعات لازم را در اختیارتان قرار میدهد، بهتر دانستیم تا در بخشی جداگانه، مزیتهای مختلفی که با استفاده از نود جی اس حاصل میشوند را زیر ذرهبین ببریم.
کامیونیتی فعال نودها
اعتبار نرمافزارهای متنباز، بیشتر از هرچیزی به جامعۀ استفادهکنندگان آنها وابسته است.
لینوکس را در نظر بگیرید.
آیا اگر تعداد خیلی زیادی از متخصصان سراغ این سیستمعامل نمیرفتند، لینوکس میتوانست به جایگاه فعلی برسد؟ مسلماً خیر!
نود جی اس هم یک ابزار متنباز است و از این قاعده مستثنی نیست.
یکی از مهمترین مزایای این ابزار، جامعۀ فعال استفادهکنندگانش هستند که متخصصها و توسعهدهندگان وب آن را تشکیل میدهند.
در واقع، این جامعۀ پویا، یکی از دلایلی است که باعث شده این ابزار به جایگاه کنونی برسد.
فرومهای مرتبط با نود جی اس، فضایی مثل Stack Overflow را فراهم کردهاند.
فرومهایی که امکان مطرح کردن سؤالات، بهاشتراکگذاری دانش و یادگیری از دیگران در آنها وجود دارد.
نتیجتاً، اگر احیاناً به مشکلی بربخورید، خیلی راحت میتوانید از طریق این فرومها پاسخ پرسش خود را بیابید و مشکل را از بین ببرید.
علاوهبر فرومهای آنلاین، هرازگاهی رویدادهای حضوری Node.js برگزار میشوند که محل گردهمایی توسعهدهندگان وب هستند.
رویدادهایی که به شبکهسازی و یادگیری از یکدیگر منجر میشوند.
خلاصه که کامیونیتی فعال نودهای این ابزار، فضایی صمیمی و تعاملگرا ایجاد کردهاند که برای برنامهنویسها با هر سطح توانایی، مناسب و کارراهانداز است.
اجرای سریع کدها و کاهش زمان بارگذاری
بالاتر که نحوۀ عملکرد نود جی اس را بررسی میکردیم، فهمیدیم بهخاطر ساختار ویژۀ این ابزار، کدها با سرعتی بالا اجرا میشوند و در نتیجه، زمان بارگذاری محتویات اپلکیشنهای تحت وب به حداقل میرسد.
علاوهبر معماری تکرشتهای و لوپ بررسی رویدادها که توضیح دادیم چطور باعث افزایش سرعت میشوند، نباید از سبک بودن این ابزار هم غافل شویم.
مخصوصاً اگر قرار باشد NodeJs را با وبسرورهای سنتیتر مقایسه کنیم، این سبکی بهوضوح قابل مشاهده است.
منظورمان این است که منابع کمتری برای عملکرد نود جی اس مورد نیاز هستند.
خلاصه که که تمام ویژگیها و خصوصیات نود جی اس دستبهدست هم میدهند تا سرعت در این ابزار به حداکثر برسد و بهترین عملکرد ممکن فراهم شود.
ساخت Node روی موتور V8 گوگل کروم
گفتیم که Node.js روی موتور V8 ساخته شده است.
موتوری که به مرورگر برند مشهور گوگل، یعنی Google Chrome تعلق دارد.
یکی از دلایل سرعت بالای ابزار همین مورد است؛ چون این موتور میتواند کدهای نوشتهشده با زبان جاوااسکریپت را به زبانی قابل فهم برای ماشین کامپایل کند.
آن هم بهشکلی کاملاً بهینه.
موتور V8 مبتنیبر زبان جاوااسکریپت است و بسیاری از اپلیکشینهای درون مرورگر گوگل را راه میاندازد.
مثلاً میتوانیم از جیمیل بهعنوان بارزترین مثال یاد کنیم.
به همین خاطر، گوگل سرمایهگذاری سنگینی روی این موتور انجام میدهد تا مطمئن شود بهترین عملکرد ممکن را از آن دریافت میکند.
قطعاً وقتی کمپانی بزرگی مثل گوگل قصد دارد از عملکرد بهینۀ موتور V8 اطمینان حاصل کند، توسعهدهندگان وب هم خیالشان راحت است که تجربۀ خیلی خوبی از کار با نود جی اس (ابزار ساختهشده روی V8) به دست میآورند.
استفاده از کتابخانه NPM
کتابخانۀ NPM بیشتر از ۱ میلیون پکیج را درون خود جای داده و یکی از بهترین منابعی است که همراه با Node.js عرضه میشود.
پکیجهای درون کتابخانهها، کدهایی هستند که امکان استفاده از آنها در برنامههای مختلف وجود دارد.
با بهرهگیری از کتابخانهها، نیازی نیست هربار آتش را کشف کنید و کارتان راحتتر میشود!
ضمناً، اگر پکیجی از کدهای مربوط به کارهای تکراری ساختهاید، میتوانید آن را به کتابخانه اضافه کنید تا دیگران هم از آن استفاده کنند.
تازه امکان دانلود پکیجهایی که دیگران به اشتراک گذاشتهاند هم وجود دارد.
تقریباً برای همۀ کارهایی که یک توسعهدهنده باید بهصورت مداوم و تکراری انجام دهد، پکیجی خواهید یافت!
پیشنهاد خواندنی: سرور چیست؟ آشنایی با مفهوم و انواع سرور (به زبان ساده)
استفاده برندهای مطرح دنیا از نود جی اس
اگر هنوز قانع نشدهاید که داریم راجعبه یک ابزار بینظیر صحبت میکنیم، احتمالا خواندن این قسمت از مقاله تکلیف را برایتان مشخص میکند.
تعداد قابل توجهی از برندهای نامآشنای جهانی از این ابزار و قابلیتهایی که دارند استفاده میکنند.
از نتفلیکس و پیپال گرفته تا لینکداین و اوبر.
تازه مو به تنتان سیخ میشود وقتی بهفمید NASA هم سراغ NodeJs رفته تا از مزایای زیر برخوردار شود:
وقتی NASA از یک ابزار استفاده میکند، دیگر نمیتوانیم بگوییم نه شاید انتخاب خوبی نباشد!!
علاوهبر این نامهای شناختهشده، بسیاری از استارتآپهای نوپا هم از NodeJs استفاده میکنند تا اپلیکیشنهای تحت وب خود را بسازند.
با توجه به این موضوع، اگر کار با قهرمان این مقاله، یعنی نود جی اس را بلد باشید، به بازار کار وسیعی دسترسی پیدا خواهید کرد و میبینید که موقعیتهای شغلی زیادی برایتان ایجاد شده است.
اینجا به انتهای مقاله میرسیم و وقت آن میشود که برویم سراغ جمعبندی.
توسعهدهندۀ وب هستید؟ حتماً کار با Node.js را یاد بگیرید!
بعد از خواندن این مقاله، خیلی خوب میدانید که Node.js چیست و چه کاربردی دارد.
فهمیدیم با ابزاری طرف هستیم که امکان نوشتن کدهای سمت سرور، یعنی کدهای بکاند با زبان برنامهنویسی جاوااسکریپت را فراهم میکند و بهدنبال این موضوع، کار توسعهدهندگان وب راحت میشود.
به همین خاطر است که به تمام افرادی که در این زمینه فعالیت دارند، توصیه میکنیم طرز استفاده از این ابزار متنباز را یاد بگیرند تا سطح مهارتهای خود را چند پله بالاتر ببرند.
سعی کردیم به تمامی جوانب بپردازیم و اجازه ندهیم نکتهای از زیر دستمان در برود؛ ولی اگر احیاناً همچنان پرسشی در این رابطه دارید، در قسمت کامنتها آن را با ما در میان بگذارید.
منابع: SimpliLearn | FreeCodeCamp
![google rating | reviews](https://citizenryco.ir/site/themes/default/assets/img/google-rate.png)
Google rating: 4.4
« ویراستار: امیر صالحی »