Tech TutorBangla Web Documentation
Portfolio
HomeHTMLCSSTailwind CSSJavaScriptTypeScriptReactNext.jsNode.jsExpressSocket.IOExpoWordPressPostgreSQLPrismaPostgresNestJSMongoDBDockerTanStackTanStack TableRTK QueryGitGitHub
  • JavaScript Documentation48টি অধ্যায়
প্রযুক্তি নির্বাচন
HomeHTMLCSSTailwind CSSJavaScriptTypeScriptReactNext.jsNode.jsExpressSocket.IOExpoWordPressPostgreSQLPrismaPostgresNestJSMongoDBDockerTanStackTanStack TableRTK QueryGitGitHub
  • Introduction
  • JavaScript কী?
  • Syntax & Comments
  • Variables
  • Data Types: Basics
  • Data Types: Conversion
  • Data Types: Advanced
  • Strings
  • Numbers & Math
  • Date & Time
  • Operators
  • Conditions
  • Loops
  • Functions: Basics
  • Functions: Intermediate
  • Functions: Advanced
  • Scope & Hoisting
  • Closures & this
  • ES6+ Modern
  • Arrays: Basics
  • Arrays: Intermediate
  • Arrays: Advanced
  • Objects: Basics
  • Objects: Intermediate
  • Objects: Advanced
  • Class: Basics
  • Class: Intermediate
  • Class: Advanced
  • DOM: Basics
  • DOM: Intermediate
  • DOM: Advanced
  • Events: Basics
  • Events: Intermediate
  • Events: Advanced
  • Async JavaScript
  • Promise
  • Async / Await
  • Fetch API
  • JSON
  • Modules
  • Browser Storage
  • Event Loop Deep
  • Prototype Chain
  • Iterators & Generators
  • WeakMap, WeakSet, Proxy
  • Error Handling
  • Practice Problems
  • Mini Projects
  • Basics
  • Functions & Scope
  • Types & Syntax
  • Arrays & Objects
  • Advanced
  • Functional Programming
  • Objects & Symbols
  • Async Deep Dive
  • Modern JavaScript
  1. Docs
  2. JavaScript
  3. Event Loop গভীরভাবে
JavaScriptAdvanced

Event Loop গভীরভাবে

Call stack, microtask/macrotask, callback queue, rendering — JavaScript কীভাবে async চালায়, গভীর বিশ্লেষণ বাংলায়।

25টি অংশবাংলা ভাষায়

এক thread-এর JavaScript কীভাবে হাজার request-এ বিচলিত হয়? এর উত্তর event loop। stack, queue আর rendering-এর এই গভীর ছবিটুকু বোঝা interview ও দুষ্ট bugs — উভয়ের জন্য জরুরি।

Call stack

function a() {
  b();
}
function b() {
  c();
}
function c() {
  console.log("গভীরতম");
}

a(); // stack: a → b → c — LIFO

JavaScript synchronous code call stack-এ একে একে চলে — শেষ-যা-প্রবেশ, প্রথমে-প্রস্থান। infinite recursion-এ stack overflow হয়।

Web APIs (ব্রাউজার/Node)

console.log("১");

setTimeout(() => console.log("২"), 0);

Promise.resolve().then(() => console.log("৩"));

console.log("৪");
// আউটপুট: ১, ৪, ৩, ২

setTimeout, fetch, event-এর মতো কাজ browser/Node-এর Web API-তে অফলোড হয়। callback-গুলো পরবর্তী queue-তে বসে। এজন্যই ২-এর আগে ৩ আসে (microtask)।

Microtask বনাম Macrotask

// microtask: Promise.then, queueMicrotask, async/await resumption
// macrotask: setTimeout, setInterval, I/O, event handlers

Promise.resolve().then(() => console.log("micro"));
setTimeout(() => console.log("macro"), 0);
console.log("sync");
// sync → micro → macro

যখনই stack খালি, event loop আগে সমস্ত microtask শেষ করে (নতুন-added-ও), তারপর একটি macrotask। তাই ভুল ধারণা: "setTimeout(0) মানে অবিলম্বে" — নয়, microtask-এর পরেও পারে।

Event loop — ধাপে ধাপে

প্রতিটি cycle:

  1. stack-এ synchronous-কাজ শেষ
  2. সব microtask queue খালি (প্রতিটি নতুন microtask-সহ)
  3. একটি macrotask ধরে চালায়
  4. প্রয়োজনে render (পেইন্ট) — browser-এ
  5. আবার শুরু
setTimeout(() => console.log("A"), 0);

Promise.resolve()
  .then(() => console.log("B"))
  .then(() => console.log("C"));

console.log("D");
// D → B → C → A

Rendering — frame থেকে frame

browser সাধারণত প্রতি frame (প্রায় 16ms/60fps) কিছু কাজ শেষে render করে। দীর্ঘ synchronous block rendering থামিয়ে দেয় — ব্রাউজার "freeze" হয়ে যায়। async-কে ছোট chunk করুন।

function processAll(items) {
  let i = 0;
  function chunk() {
    for (; i < items.length && i < i + 500; i++) {
      heavy(items[i]);
    }
    if (i < items.length) {
      setTimeout(chunk, 0);   // frame-কে শ্বাস নিতে দিন
    }
  }
  chunk();
}

তারপরেও থেমে থাকলে — 5000-item-এর মতো বড় কাজ-এ requestAnimationFrame বা Worker ব্যবহারের কথা ভাবা যায়।

Blocking-কে চেনা

// দীর্ঘ synchronous loop মাউস ও রেন্ডার — দুই-ই থামায়
function heavyLoop() {
  for (let i = 0; i < 5_000_000; i++) {
    // ভারী হিসাব
  }
}

// সমাধান: chunk/async — event loop ও render-কে সুযোগ দিন

সাধারণ guideline: synchronous-এ কী কী block করে সেটা চেনা বেশি দরকারি — ভারী loop/বড় DOM/বড় JSON parse async কৌশলে ভাঙা যায়।

ভূমিকাতাই কী
Call stacksynchronous কাজ LIFO
Microtask queuePromise.then, async resumption
Macrotask queuesetTimeout, I/O, events
Event loopstack-খালি → microtasks → এক macro → render
অনুমানে না বিশ্বাস

setTimeout(0) মানে "অবিলম্বে" নয় — microtask-এর পরেও থাকতে পারে। সন্দেহ হলে কনসোলে চালিয়ে দেখুন।

Interview

"Event loop কী?" — সহজ তিন ধাপ: stack, microtask-খালি হওয়া, একটি macrotask; browser-এ frame render। সাথে micro/macro পার্থক্য।

Practice

উপরে setTimeout/Promise-এর mix আউটপুট নিজে লিখে কনসোলে run করুন — order-এর prediction অনুশীলন করুন।

শেষ প্যারায় নিজে practice করুন — কোড কপি করে নিজের এডিটরে চালিয়ে দেখুন।
আগেরBrowser StorageপরেরPrototype Chain
এই পেজে
Tech Tutor

বাংলায় ওয়েব ডেভেলপমেন্ট ডকুমেন্টেশন শিখুন — ধাপে ধাপে।

Homeসব ডকুমেন্টেশনQuick Startআমার নোটস

© 2026 Tech Tutor. বাংলায় শিখুন, বাংলায় গড়ুন।

mdanamolhasan1998@gmail.com