Node.js دقیقا چیست و چرا از آن استفاده میکنیم؟
Node.js یک محیط زمان اجرای جاوا اسکریپت است که به نظر عالی می رسد.اما واقعا این به چه معناست و چطور کار میکند؟ محیط زمان اجرای Node شامل هر چیزی است که شما برای اجرای یک برنامه به زبان جاوا اسکریپت به آن نیاز دارید.
Node.js از زمانی وجود داشت که کاربران اولیه جاوا اسکریپت آن را از حالتی که فقط بر روی یک مرورگر اجرا میشد به حالتی که بر روی کامپیوتر شما همچون یک برنامه مستقل کار میکند، گسترش دادند. اکنون میتوانید با استفاده از جاوااسکریپت کارهای بیشتری فراتر از طراحی سایت های تعاملی انجام دهید. اکنون جاوا اسکریپت توانایی انجام کارهایی را دارد که زبان هایی همچون پایتون می توانند انجام دهند.
هردوی جاوا اسکریپت مرورگر و Node.js بر روی موتور زمان اجرای V8 جاوااسکریپت اجرا میشوند. این موتور اجرا، کد جاوا اسکریپت شما را گرفته و به کدهای سریع ماشین تبدیل میکند. کدهای ماشین کدهای سطح پایینی هستند که کامپیوتر ها بدون اینکه نیاز به تفسیر آنها داشته باشند، آنها را اجرا میکنند.
چرا Node.js؟
در زیر تعریف رسمی از Node.js که در سایت آن منتشر شده است، آورده شده است :
- Node.js یک زمان اجرای جاوااسکریپت است که بر روی Chrome’s V8 JavaScript engine ساخته شده است.
- Node.js از مدل event-driven و non-blocking I/O که آن را سبک و کاراتر کرده است، استفاده میکند.
- اکو سیستم پکیج Node.js یعنی همان npm ، بزرگترین اکوسیسیتم کتابخانه ای سورس باز جهان است.
قبلاً در مورد خط اول آیتم های بالا یعنی تعریف Node.js صحبت کرده ایم. اکنون بیایید ببینیم دو خط بعدی که در تعریف رسمی این سایت به آن اشاره شده است، چرا تا این حد این محیط اجرا را محبوب کرده است.
I/O اشاره به input/output (ورودی و خروجی) دارد و می تواند هر چیزی در گستره خواندن و نوشتن فایل های محلی تا ارسال یک درخواست HTTP به یک API را در بربگیرد. I/O مدت زمانی را صرف می کند و از این رو دیگر توابع در این مدت محدود میشوند.
سناریویی را در نظر بگیرید که ما درخواستی را برای به دست آوردن اطلاعات دو کاربر user1 و user2 به سمت دیتابیس ارسال کرده ایم و قرار است بعد از به دست آمدن اطلاعات، آنها را بر روی صفحه نمایش و یا صفحه کنسول نمایش دهیم.
پاسخ به این درخواست ها مدت زمانی را به خود اختصاص خواهد داد. اما هردو درخواستی که برای این کاربران داده شده است میتوانند مستقل از همدیگر و در یک زمان انجام شوند.
Blocking I/O
در حالت Blocking I/O درخواست ارسالی کاربر دوم تا زمانی که اطلاعات کاربر اول بر روی صفحه چاپ نشود، اجرا نمی شود. اگر این یک وب سرور بود میتوانستیم یک thread جدید را برای هر کاربر آغاز کنیم اما جاوااسکریپت single-threaded است (البته به به معنای واقعی اما دارای یک چرخه رویداد single-threaded است)
با همه این اوصاف جاوااسکریپت زبان مناسبی برای انجام وظایف multi-threaded نیست. در اینجاست که قابلیت non-blocking به کمک ما می آید.
Non-blocking I/O
به عبارت دیگر با استفاده از درخواست های Non-blocking I/O میتوانید درخواست کاربر دوم را اجرا کنید بدون اینکه لازم باشد منتظر پاسخ درخواست کاربر اول باشید. در واقع شما میتوانید این دو درخواست را به صورت موازی اجرا کنید. قابلیت Non-blocking I/O نیاز به multi-threading را کاهش داده است زیرا سرور می تواند چندین درخواست را در یک زمان مدیریت کند.
npm
npm کتابخانه هایی هستند که به وسیله عموم ساخته شده اند که می تواند اکثر مشکلات عمومی شما را حل کند. npm و یا به عبارتی دیگر Node package manager دارای بسته هایی هست که می توانید از آنها در برنامه های خود به منظور توسعه سریعتر بهره ببرید.
ماژول های Node
ماژول Node بلوکی است که قابلیت استفاده مجدد را دارد و وجودش بر روی دیگر کدها اثری نمیگذارد. شما می توانید ماژول مورد علاقه خود را بنویسید و از آن در برنامههای مختلف استفاده کنید. Node.js دارای مجموعه ای از ماژول های built-in است که از آنها بدون نیاز به راه اندازی اولیه می توان استفاده کرد.
V8
V8 یک موتور زمان اجرای سورس باز است که با استفاده از ++C نوشته شده است. جاوااسکریپت ابتدا به V8 تبدیل شده و در نهایت به کد ماشین مبدل می شود. V8 اسکریپتی به نام ECMAScript را پیاده سازی می کند. ECMAScript به وسیله Ecma International به منظور استاندارد کردن جاوااسکریپت پدید آمد.
V8 می تواند به تنهایی اجرا شود و یا داخل هر برنامه ای به زبان ++C قرار بگیرد. V8 دارای قابلیت هایی است که به شما اجازه نوشتن کدهای از ++C را میدهد که میتوانید آنها را در جاوا اسکریپت داشته باشید. مخصوصا شما اجازه دارید ویژگیهایی را با قرار دادن V8 داخل کد ++C به جاوا اسکریپت اضافه کنید.
رویدادها
چیز هایی که در برنامههای ما اتفاق می افتند و ما میتوانیم به آنها پاسخ دهیم رویداد نامیده میشوند. در Node دو نوع رویداد داریم :
- رویداد های سیستمی که مروبط به هسته ++C هستند. برای مثال اتمام خواندن یک فایل.
- رویداد های Custom که مربوط به هسته جاوا اسکریپت هستند.
نوشتن برنامه Hello World در Node.js
بیاید به منظور آشنایی بیشتر با Node.js برنامه Hello World را پیاده سازی کنیم. فایلی به نام app.js را ایجاد کرده و کد زیر را در آن قرار دهید :
console.log("Hello World!");
ترمینال node خود را باز کرده و دایرکتوری خود را به جایی که فایل بالا در آن ذخیره شده است تغییر دهید و سپس دستور node app.js را اجرا کنید. به همین سادگی برنامه Hello World را نوشته و اجرا کردید.
در انتها باید بگویم منابع زیادی در اینترنت برای یادگیری Node.js وجود دارد که میتوانید برای پیشرفت خود به آنها رجوع کنید.
write a litte more on this topic? I'd be very grateful if you could elaborate
a little bit further. Bless you!