NodeJs چیست؟

نویسنده پوریا ستایش پوریا ستایش
1399/04/20
0
118
زمان مطالعه 8 دقیقه
NodeJs چیست؟
با سری مقالات آموزش NodeJs به صورت جامع و فراگیر در خدمت شما هستیم. در این مقالات قصد داریم NodeJs را به زبانی ساده مطرح کنیم. همچنین هدف ما این است که هیچ مفهومی مبهم نباشید و به صورت کامل شرح داده شود. در قسمت اول این آموزش با ما همراه باشید.

برای اطلاع از سرفصل های کامل این دوره اینجا کلیک کنید.

پیشنیاز NodeJS چیست؟

قبل از اینکه به NodeJs بپردازیم باید بگوییم برای این که کاملا این مفهوم را درک کنید نیاز به یک سری دانش پایه می باشد که عبارت اند از :

پیشنیاز دوره ی NodeJs سایت درنام

  • آشنایی با زبان نشانه گذاری Html
  • درک متوسطی از زبان برنامه نویسی جاوااسکریپت یا Javascript

معرفی NodeJs

معرفی NodeJs

برای اولین بار در سال 2009 بود که آقای رایان دال (به انگلیسی : Ryan Dahl) NodeJs را نوشت و معرفی کرد.

NodeJs یک محیط Runtime بر پایه ی جاوا اسکریپت است! این جمله را شاید خیلی جاها دیده باشید ولی واقعا یعنی چی؟

Runtime یک اصطلاح عمومیه که به کتابخانه، فریم ورک یا پلتفرمی که کدهای شما داخلش اجرا میشه اشاره میکنه.

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

پس حالا با اینکه میدانید Runtime یعنی چه باید بگوییم نود جی اس (به انگلیسی : NodeJs) یک محیط Runtime سمت سرور می باشد که کاملا Open Source یا متن باز است و همچنین قابلیت اجرا بر روی سیستم عامل های مختلف مثل ویندوز، لینوکس، مک و... را دارد که اصطلاحا Cross Platform گفته می شود.

دقت داشته باشید وقتی ما مطلبی را مینویسیم هدفمان این نیست که بخواهیم با نوشتن کلمات انگلیسی بار علمی مطلب را بالا ببریم یا اینکه بگوییم ما خیلی حرفه ای هستیم!

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

بررسی نام NodeJs

قبل از اینکه بخواهید ادامه ی مطلب را بخوانید باید یک سردرگمی را برطرف کنیم و آن هم این است که بگوییم اسم این محیط Node.Js می باشد. هر چند که پسوند فایل های جاوا اسکریپت .js می باشد ولی این .js صرفا بخشی از نام این محیط است و ربطی به کتابخانه یا فایل خاصی ندارد.

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

NodeJs پلتفرمی سمت سرور است که بر پایه ی موتور جاوااسکریپت گوگل کروم (موتور V8) ساخته شده است.  

Node.js همچنین یک کتابخانه غنی از ماژول های مختلف JavaScript فراهم می کند که توسعه برنامه های وب با استفاده از Node.js را تا حد زیادی ساده می کند.

ویژگی های NodeJs

ویژگی هاای NodeJs

Nodejs از JavaScript استفاده  می کند

توسعه در Nodejs برای توسعه دهنده ای که جاوا اسکریپت را می شناسد بسیار آسان است. یا به عبارت ساده تر برنامه نویس های سمت کاربر به راحتی تبدیل به برنامه نویسان سمت سرور می شوند.

NodeJs به شدت سریع است

نود جی اس كه بر پایه ی موتور جاوا اسکریپت گوگل کروم (موتور V8) ساخته شده است، در اجرای كدهای شما بسیار سریع است.

NodeJs داده را Buffer نمیکند

اپلیکیشن های Nodejs هیچ گونه داده ای را بافر نمی کنند. این برنامه ها به سادگی داده ها را در تکه های مختلف تولید می کنند.

وجود جامعه ی توسعه دهنده ی بزرگ

به دلیل جامعه فعال ، همیشه به روزرسانی های کلیدی وجود دارد که برای NodeJs در دسترس است. این کمک می کند تا اپلیکیشن های شما با آخرین متد های روز توسعه داده شوند.

NodeJs تک نخ یا Single Thread می باشد

نود جی‌اس تنها روی یک نخ اجرا می‌شود و با استفاده از ورودی/خروجی ناهمگام (مسدود نشدنی) امکان پشتیبانی از ده‌ها هزار ارتباط هم‌زمان را فراهم می‌کند. جاوااسکریپت برای اجرای وظایف چند نخی مناسب نیست. اینجاست که روش مسدود نشونده یا نشدنی به ما کمک خواهد کرد که در ویژگی زیر بررسی شده است.

NodeJs مبتی بر رویداد است.

NodeJs غیر همزمان (ورودی و خروجی) و رویداد محور است.

مفهوم None-Blocking در Nodejs

همه ی API های موجود در NodeJs غیر همزمان ورودی و خروجی یا (Asynchronous IO) هستند که به Non-Blocking یا مسدود نشونده (مسدودنشدنی) نیز معروف می باشند.در اصل به این معنی است که یک سرور مبتنی بر Node.js، هرگز منتظر یک API برای بازگشت داده نخواهد بود. حالا یعنی چی؟ با مفاهیم sync و async و یم مثال این مفهوم را برای شما شرح می دهیم.

اینجا لازم هست که با مفهوم Sync آشنا باشید. در Sync یک درخواست بلافاصله اجرا می شود و بقیه سیستم باید منتظر پایان آن بماند. اینگونه نیز میتوان عنوان کرد که در حالت Sync منابع سیستم بعد از پایان یک تقاضا یا Request آزاد میشوند.

در مقابل یک سری درخواست دیگر وجود دارند که در بالا دیدید. درخواست های Async ، در Async درخواست به سیستم ارسال میشود و سیستم عامل قول میدهد که پایان آن را  اعلام کند اما اینکه دقیقا کی انجام میشود معلوم نیست.

مثال : فرض کنید در سایت دو کاربر داریم به اسم علی و رضا و هر کدام از این کاربران میخواهند در سایت فعالیت مشخصی را انجام دهند به عنوان مثال میخواهند در سایت ثبت نام کنند.

در درخواست های Sync دریافت اطلاعات از رضا تا زمانی که اطلاعات علی پردازش نشده باشد، شروع نمی شود ولی در درخواست های Async می توانیم درخواست رضا را انجام بدهیم ، بدون اینکه منتظر پردازش اطلاعات علی باشیم. یعنی می توانیم هر دو درخواست را بصورت موازی انجام دهیم.

نتیجه به صورت خلاصه : اگر درخواستی ارسال شد و منتظر موندیم تا تمام شود و درخواست بعدی اجرا شود به آن Blocking گفته می شود اگر منتظر نتیجه ی درخواست قبلی نموندیم یعنی Non-Blocking یعنی مسدود نشدنی!

در عنوان این بخش اعلام کردیم که NodeJs رویداد محور است. در دنیای برنامه نویسی وقتی شما روی یک لینک کلیک می‌کنید یک Event اتفاق می‌افتد یا بخواهیم کاربردی تر صحبت کنیم وقتی یک query یه سمت دیتابیس می فرستید یک رویداد حساب می شود.رویدادمحور سبکی از برنامه نویسی است که در آن روند اجرای برنامه توسط رویدادها تعیین می‌شود.

رویداد محور بودن یا Event-Driven به چه معناست؟

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

چون در این حالت به جای اینکه چرخه رویداد (Event Cycle) را تا زمانی که داده ها در حال واکشی هستند منتظر بگذاریم، NodeJs رویداد یا event ای را ثبت می کند و هنگامی که پردازش تمام می شود، رویداد فراخوانی می شود و چرخه رویداد را آزاد می کند تا درخواست بعدی را انجام دهد پس در این روش کد نویسی، ما در زمان صرفه جویی کرده ایم.

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

با آخرین مبحث از قسمت اول آموزش NodeJs در خدمت شما هستیم.

Npm چیست؟

npm چیست؟

Npm مخفف عبارت Node Package Manager می باشد که سرعت توسعه ی نرم افزار های شما را افزایش می دهد و مرجعی بزرگ برای کتابخانه های جاوااسکریپتی می باشد. برای دسترسی به سایت رسمی npm میتوانید اینجا کلیک کنید.

خیلی وقت پیش ها برای اینکه ویژگی یا کامپوننتی به پروژه هایمان اضافه کنیم می بایست یا خودمان می نوشتیم یا اینکه در اینترنت به جستجوی کتابخانه ی مورد نظر می پرداختیم. اگر کتابخانه را پیدا میکردیم می بایست دانلودش میکردیم و به پروژه اضافه می کردیم.

مشکللاتی که به این روش وارد است یکی جستجو در فضای بیکران اینترنت می باشد و یکی هم اینکه اگر ما بعدا خواستیم کتابخانه را آپدیت کنیم باید حتما می دانستیم که کتابخانه را از کجا دانلود کرده بودیم و به سایت مورد نظر سر میزدیم و بررسی میکردیم که آیا اصلا آپدیت شده است یا خیر.

اصلا از کجا متوجه بشیم یک کتابخانه کوچک آپدیت شده است که بخواهیم به سایت مورد نظر سر بزنیم؟

npm با داشتن یک command line‌، این مشکلات را برای ما حل کرده است و با نوشتن چند دستور ساده می توانیم این فعالیت ها را انجام بدهیم.

نمونه ی ساختار یک دستور در npm

نمونه دستور در سیستم عامل ویندوز به شکل زیر است :

C:\>npm install <package>

نمونه دستور در سیستم عامل Mac به شکل زیر است :

>npm install <package>

 مزایای npm 

  • همانطور که گفته شد بروزرسانی پکیج ها را آسان کرده است.
  • همچنین امکان مدیریت ورژن یا نسخه را فراهم کرده است.
  • امکان اشتراک گذاری کدهایمان با بقیه برنامه نویسان وجود دارد.
  • وجود مرجعی بزرگ به جای جستجو در فضای بیکران اینترنت.

در ادامه ی سری مقالات آموزشی NodeJs با دستورات Npm به طور مفصل آشنا می شویم.

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