همه جا این رو میخونیم که Node.js یک محیط اجرایی برای زبان جاوااسکریپت هست، خوب!؟ ایول! ولی این دقیقا یعنی چی؟ مگه قرار نبود جاوااسکریپت توی مرورگر اجرا بشه؟ پس فاز چیه؟
ببینید محیط اجراییه Node.js فضا و تمام اون چیزهایی که نیازه که کدهای نوشته شده جاوااسکریپت اجرا بشه رو داره. مثلا به این شکل نگاه کنید:

در واقع Node.js از اونجایی اومد که برنامه نویسهای جاوااسکریپت تصمیم گرفتن که فرای این باشن که فقط خلق مسائل خارق العاده توی مرورگر کنن.
جاوااسکریپت هم توانایی و پتانسیل این رو داشت که مثل زبانهای اسکریپتیه دیگه مثلا پایتون باشه و بتونه توی محیط غیر از مرورگر کار کنه.
همونطور که توی عکس بالا میبینید، نشون دادم که موتور اصلی Node.js در واقع V8 هست، توی مرورگر هم همینه، اونجا هم V8 داره کار میکنه. این سوال در ذهن همه تداعی میشه که موتور چیه؟

موتور V8 کدهای جاوااسکریپت رو به کدهای سطح پایینتر تبدیل میکنه که ماشین یا همون رایانه اون رو بهتر و سریعتر میفهمه، بهش میگن زبان ماشین. اینطوری که ماشین برای اجرای اون کدها به تحلیل و تفسیرشون نیاز نداره.
خود سایت Node.js اینطور بیان میکنه که:
محیطNode.jsبر اساس موتور V8 کروم ساخته شده.
محیطNode.jsاز یک مدل رویداد محور و non-blocking I/O استفاده میکنه که اینNode.jsرو سبک و کارآمد میکنه.
محیطNode.jsاکوسیستمی برای پکیجهاش داره به نامه npm که بزرگترین اکوسیستم کتابخانههای متن باز در دنیاست.
در مورد اولی صحبت کرده بودم، بهتره که در مورد دومی که مهمترینش هم هست یکم بیشتر توضیح بدم.
منظور از I/O همون Input/Output هست. میتونه هر چیزی باشه، از خوندن/نوشتن توی فایل باشه تا ارسال درخواستهای HTTP به یک API.
این یعنی I/O برای اجرا زمان میبره و این یعنی بقیهء کارها الافش میشن، یجورایی بقیه رو نگه میداره تا کار خودش انجام بشه.
خیلی کوتاه توضیح بدم، جاوااسکریپت ساختار non-blocking I/O داره و برای انجام کارهایی که به زمان نیاز داره، الباقی کارها رو الاف خودش نمیکنه، به طبع Node.js هم این خاصیت رو داره پس دیگه نیاز شما رو به داشتن multi-threading از بین میبره، چون دیگه سرور شما این توانایی رو داره که درخواستهای زیادی رو همزمان جواب بده.
خوب توجه کنید، شما باید خیلی خیلی خوب متوجه بشید که حلقه رویدادهای جاوااسکریپت چطوری کار میکنه، اصطلاح اصلیش رو بگم، باید بدونید event loop جاوااسکریپت چطوری کار میکنه، به شکل زیر توجه کنید:

مرحله به مرحله میخوام توضیح بدم که قشنگ متوجه بشید داستان چیه:
main به استک اضافه میشه.console.log('Starting app') به استک اضافه میشه. اجرا میشه و از استک میاد بیرون.setTimeout(2000) به استک اضافه میشه. setTimeout(2000) از API های Node.js هست. زمانی که صداش میزنیم تا اجراش کنیم در واقع اون رو توی لیست Node APIs ثبت میکنیم. اون صبر میکنه به اندازه زمانی که بهش دادیم که اینجا ۲۰۰۰ میلی ثانیه هست و بعد تابع callback خودش رو به صف اضافه میکنه.Node APIs ثبت شد، خود setTimeout(2000) از استک میاد بیرون.setTimeout(0) که اون هم مثل دوست اولیش باهاش برخورد میشه. در لیست Node APIs ثبت میکنیم و از استک میاد بیرون.callback مربوط به خودشون رو توی صف قرار میدن. طبیعی هست که هر کسی زودتر، تابع callback اون هم توی صف جلوتره، اینجا setTimeout دومی چون زمانش صفر بود، callback ش زودتر میره توی صف و ۲۰۰۰ میلی ثانیه یا به عبارتی ۲ ثانیه بعد setTimeout اولی callback ش رو میفرسته توی صف و میشه نفر دوم صف.event loop مراقب هست که اول استک خالی بشه و بعد به ترتیب توابع داخل صف رو اجرا کنه.console.log('Finishing up') هم به استک اضافه میشه، اجرا میشه و از استک خارج میشه و بعد اون هم main خارج میشه.event loop صف رو تک به تک شروع به اجرا میکنه. اولی تابع console.log('Second setTimeout') و بعدش هم console.log('Inside of callback') و تمام."Starting app"
"Finishing up"
"Second setTimeout"
"Inside of callback"
در مورد مساله سومی هم باید بگم که کتابخانههای زیاد و عالیای در npm یا همون Node Package Manager وجود داره که خیلی از گرهها رو باز کرده و از این به بعد هم میکنه و سرعت و کارآمدی برنامه نویسی شما رو بیشتر میکنه.
کاری نداره بخدا، برای این کار نیازه که Node.js رو نصب کرده باشی که میتونی بری توی سایتش و نسبت به سیستم عاملتون فایلش رو دانلود کنید و نصب و تمام.
این از اولش. بعدش هرجا که دلتون خواست، یه فایل بسازید مثلا example.js و توش یه کد خیلی خیلی ساده جاوااسکریپت بنویسید. مثلا بنویسید:
console.log('Hello World!');
خوب حالا محیط کامندیتون رو باز کنید، توی ویندوز مثلا cmd یا power shell و توی لینوکس و مک هم terminal و با اون به مکانی برید که فایل example.js داخلش وجود داره. حالا تایپ کنید:
node example.js
و خروجی رو همونجا میتونید ببینید. دیدید؟ خیلی ساده، همین الآن شما یه Node.js کار شدید. البته که راه زیادی در پیش دارید. برای نوشتن یه برنامه کامل با زلم زیمبوهای خاص خودش خیلی چیزها نیازه. آشنایی با API ها و فریمورکها و هزاران چیز دیگه که من پیشنهاد میکنم به منابع انگلیسی زبان مراجعه کنید. برای شروع پیشنهاد من کورس زیر هست:
Lynda Node.js Essential Training
امیدوارم این مقاله به کارتون بیاد. شاد و موفق باشید.