درک حلقه رویداد در node.js: یک راهنمای گام به گام

مقدمه
node.js است تک رشته، اما به طور موثری با استفاده از آن ، همزمان را کنترل می کند معماری رویداد محور ، بدون مسدود کنندهبشر در حلقه رویداد در قلب این مکانیسم قرار دارد و مدیریت عملیات ناهمزمان مانند وظایف I/O ، تایمرها و تماس های تماس تلفنی است.
در این وبلاگ ، ما تجزیه خواهیم کرد:
- در پشته تماس
- در API های وب
- در صف ریزگردها
- در صف کارک ماس (صف تماس)
- در حلقه رویداد
در پایان ، شما خواهید فهمید چگونه node.js JavaScript را بطور غیر همزمان اجرا می کند و چرا برخی از تماس های تماس قبل از دیگران اجرا می شوند.
1. پشته تماس بگیرید
در پشته تماس دنبال می کند Last In ، First Out (Lifo) اصل و مسئولیت اجرای توابع JavaScript را بر عهده دارد.
مثال:
function greet() {
console.log("Hello, World!");
}
greet();
جریان اعدام:
-
greet()
روی پشته تماس هل داده می شود. -
console.log()
درونgreet()
روی پشته فشار می یابد. - “سلام ، جهان!” چاپ شده است
-
console.log()
خاموش شده است -
greet()
خاموش شده است
وقتی پشته است خالی، node.js می تواند اجرا کند کارهای ناهمزمان از صف ها
2. API های وب (Node.js API)
عملیات ناهمزمان مانند settimeout ، وظایف I/O و درخواست های HTTP به آنها واگذار شده اند API های وب در مرورگر یا node.js apis در زمان اجرا
مثال:
console.log("Start");
setTimeout(() => {
console.log("Timeout Callback");
}, 0);
console.log("End");
جریان اعدام:
- “شروع” وارد شده است.
-
setTimeout()
یک تماس تلفنی را ثبت می کند API های وببشر - “پایان” وارد شده است.
- در حلقه رویداد حرکت می کند
setTimeout()
پاسخ به صف تماس و بعد از خالی بودن پشته تماس ، آن را اجرا می کند.
خروجی:
Start
End
Timeout Callback
حتی با 0ms
، پاسخ به تایمر پس از کد همزمان اجرا می شود زیرا به صف تماسبشر
3. صف میکرو کار
در صف میکرو کار (یا صف کار) داشتن اولویت بالاتر از صف تماس (صف کلان کار)بشر
شامل:
- وعده ها (
.then()
با.catch()
با.finally()
) - process.nexttick () (فقط node.js ، حتی اولویت بالاتر از وعده ها)
مثال:
console.log("Start");
setTimeout(() => console.log("setTimeout"), 0);
Promise.resolve().then(() => console.log("Promise"));
process.nextTick(() => console.log("process.nextTick"));
console.log("End");
جریان اعدام:
- “شروع” وارد شده است.
-
setTimeout()
حرکت به صف تماسبشر -
Promise.then()
حرکت به صف میکرو کاربشر -
process.nextTick()
حرکت به صف میکرو کار (اولویت بالاتر از وعده ها). - “پایان” وارد شده است.
-
ابتدا میکروتاسک ها را اجرا کنید:
- “Process.NextTick” چاپ می شود.
- “قول” چاپ شده است.
- کارهای کلان را اجرا کنید:
خروجی:
Start
End
process.nextTick
Promise
setTimeout
4. صف ماکرو (صف تماس)
در صف کار تماس های برگشتی از:
- settimeout ()
- setInterval ()
- setimmediate ()
- وظایف I/O (fs.readfile ، درخواست های شبکه ، نمایش داده های پایگاه داده)
- تماس های تماس تلفنی پیام
مثال:
setTimeout(() => console.log("setTimeout"), 0);
setImmediate(() => console.log("setImmediate"));
بسته به زمینه اعدام ، یا محل استقرار یا دارای پیش بینی ممکن است اول اجرا شود.
5. حلقه رویداد: سفارش اعدام
در حلقه رویداد این دستور را دنبال می کند:
- تمام کد همزمان را اجرا کنید (پشته تماس)
- اجرای فرآیند. nextTick ()
- میکروتاسک ها را اجرا کنید (وعده ها ، async/در انتظار)
- اجرای کارهای کلان (settimeout ، i/o ، setimmediate)
- چرخه را تکرار کنید
مثال کامل:
console.log("Start");
setTimeout(() => console.log("setTimeout"), 0);
setImmediate(() => console.log("setImmediate"));
Promise.resolve().then(() => console.log("Promise"));
process.nextTick(() => console.log("process.nextTick"));
console.log("End");
سفارش اعدام:
- “شروع” چاپ می شود.
-
setTimeout()
حرکت به صف کاربشر -
setImmediate()
حرکت به صف کاربشر -
Promise.then()
حرکت به صف میکرو کاربشر -
process.nextTick()
حرکت به صف میکرو کار (اولویت بالاتر از وعده ها). - “پایان” چاپ شده است.
-
ابتدا میکروتاسک ها را اجرا کنید:
- “Process.NextTick” چاپ می شود.
- “قول” چاپ شده است.
-
کارهای کلان را اجرا کنید:
- “Settimeout” چاپ شده است.
- “setimmediate” چاپ می شود.
خروجی نهایی:
Start
End
process.nextTick
Promise
setTimeout
setImmediate
6 خلاصه
کارهای میکرو (اولویت بالاتر)
✅ process.nexttick () (فقط node.js ، بالاترین اولویت)
✅ وعده ها (.then()
با .catch()
با .finally()
)
✅ MutationObservers (فقط مرورگر)
کارهای کلان (اولویت پایین)
✅ settimeout () ، setInterval ()
✅ setimmediate () (اجرای بعد از وظایف I/O)
✅ عملیات I/O (fs.readfile ، درخواست های شبکه)
✅ تماس های تماس تلفنی پیام
سفارش اعدام:
- کد هماهنگ (پشته تماس)
- process.nextTick ()
- وعده ها (ریزگردها)
- کارهای کلان (settimeout ، setInterval ، setimmediate ، وظایف I/O)
7. نتیجه گیری
در حلقه رویداد ستون فقرات اجرای ناهمزمان Node.js است. درک آن به:
- نوشتن کد کارآمد و غیر مسدود کنندهبشر
- اجتناب جهنم تماس تلفنیبشر
- بهینه سازی عملکرد در برنامه های کاربردی بالابشر
مراحل بعدی:
✅ ترکیب های مختلف عملیات async را امتحان کنیدبشر
✅ از وعده ها و Async/در انتظار کد پاک تر استفاده کنیدبشر
✅ با وظایف سیستم شبکه و فایل در node.js آزمایش کنیدبشر
آیا می خواهید یک نمایش بصری یا یک نسخه ی نمایشی تعاملی باشد؟ به من اطلاع دهید!