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

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

موتور V8 کدهای جاوااسکریپت رو به کدهای سطح پایینتر تبدیل میکنه که ماشین یا همون رایانه اون رو بهتر و سریعتر میفهمه، بهش میگن زبان ماشین. اینطوری که ماشین برای اجرای اون کدها به تحلیل و تفسیرشون نیاز نداره.
چرا Node.js ؟
خود سایت 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 بزنیم؟
کاری نداره بخدا، برای این کار نیازه که 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امیدوارم این مقاله به کارتون بیاد. شاد و موفق باشید.
مطلبی دیگر از این انتشارات
استخدام توسعه دهنده Front-End یا چی؟
مطلبی دیگر از این انتشارات
:: نود جی اس و بات تلگرام ::
مطلبی دیگر از این انتشارات
نوشتن کوئری Mysql در Node.js