📄 Lazy Loading

🧑‍đŸĢ React Lazy Loading

āĻ­āĻžāĻŦ⧁āύ āφāĻĒāύāĻŋ āĻŦāϞāϛ⧇āύ —

“āĻĻā§‹āĻ¸ā§āϤ, āϜāĻžāύ⧋ āϤ⧋, āφāĻŽāϰāĻž āϝāĻ–āύ āĻ…ā§āϝāĻžāĻĒ āĻŦāĻžāύāĻžāχ, āϤāĻ–āύ āϏāĻŦ āĻ•āĻŽā§āĻĒā§‹āύ⧇āĻ¨ā§āϟ āĻāĻ•āϏāĻžāĻĨ⧇ āχāĻŽā§āĻĒā§‹āĻ°ā§āϟ āĻ•āϰāĻŋāĨ¤ āĻ•āĻŋāĻ¨ā§āϤ⧁ āϏāĻŦ āϏāĻŽā§Ÿ āϤ⧋ āχāωāϜāĻžāϰ āϏāĻŦ āĻĒ⧇āχāĻœā§‡ āϝāĻžā§Ÿ āύāĻž, āϤāĻžāχ āύāĻž?”

āĻāχ āϚāĻŋāĻ¨ā§āϤāĻž āĻĨ⧇āϕ⧇āχ āφāϏ⧇ 👉 Lazy Loading — āϝ⧇āϟāĻž āĻŦāϞ⧇:

"āϝāĻ–āύ āĻĻāϰāĻ•āĻžāϰ āϤāĻ–āύāχ āϞ⧋āĻĄ āĻ•āϰ⧋, āφāϗ⧇ āύāĻžāĨ¤"


đŸ”Ĩ āφāϏāϞ āϏāĻŽāĻ¸ā§āϝāĻž āϕ⧀?

React āĻ āφāĻŽāϰāĻž āϏāĻžāϧāĻžāϰāĻŖāϤ āϏāĻŦ āĻ•āĻŽā§āĻĒā§‹āύ⧇āĻ¨ā§āϟ āĻāĻ•āϏāĻžāĻĨ⧇ āχāĻŽā§āĻĒā§‹āĻ°ā§āϟ āĻ•āϰāĻŋ:

import MarkdownPreview from "./MarkdownPreview.js";

āϤāĻžāϤ⧇ āĻšā§Ÿ āϕ⧀?

  • āĻĒ⧁āϰ⧋ āĻ…ā§āϝāĻžāĻĒ āĻāĻ•āϏāĻžāĻĨ⧇ āĻŦāĻžāĻ¨ā§āĻĄā§‡āϞ āĻšā§Ÿ
  • āĻĒā§āϰāĻĨāĻŽāĻŦāĻžāϰ āϏāĻžāχāϟ āĻ–ā§‹āϞāĻžāϰ āϏāĻŽā§Ÿ āϏāĻŦ āĻ•āĻŋāϛ⧁āχ āĻĄāĻžāωāύāϞ⧋āĻĄ āĻšā§Ÿ
  • āχāωāϜāĻžāϰ āĻšā§Ÿ āĻŦāĻŋāϰāĻ•ā§āϤ đŸ˜Ģ

💡 āϏāĻŽāĻžāϧāĻžāύ: Lazy Loading

React āφāĻŽāĻžāĻĻ⧇āϰ āϜāĻ¨ā§āϝ āĻĻāĻŋā§Ÿā§‡āϛ⧇ 👉 React.lazy() āϝ⧇āϟāĻž āĻŦāϞ⧇: “āφāĻŽāĻŋ āĻ•āĻŽā§āĻĒā§‹āύ⧇āĻ¨ā§āϟ āϤāĻ–āύāχ āχāĻŽā§āĻĒā§‹āĻ°ā§āϟ āĻ•āϰāĻŦ, āϝāĻ–āύ āχāωāϜāĻžāϰ āĻ“āϟāĻž āĻĻ⧇āĻ–āϤ⧇ āϚāĻžāχāĻŦ⧇āĨ¤â€


🚀 āϧāĻžāĻĒ⧇ āϧāĻžāĻĒ⧇ Lazy Loading āĻļ⧇āĻ–āĻž āϝāĻžāĻ•


🧩 Step 1: Lazy āĻ•āϰ⧇ āĻ•āĻŽā§āĻĒā§‹āύ⧇āĻ¨ā§āϟ āχāĻŽā§āĻĒā§‹āĻ°ā§āϟ

import { lazy } from "react";
 
const MarkdownPreview = lazy(() => import("./MarkdownPreview.js"));

💡 āĻŽāύ⧇ āϰāĻžāĻ–ā§‹:

  • āĻāχ import() asynchronous
  • āϤāĻžāχ āĻāϟāĻž āϤāĻ–āύāχ āĻ•āĻžāϜ āĻ•āϰāĻŦ⧇, āϝāĻĻāĻŋ āϤ⧁āĻŽāĻŋ āĻāϟāĻžāϕ⧇ Suspense āĻĻāĻŋā§Ÿā§‡ wrap āĻ•āϰ⧋

🧩 Step 2: Suspense āĻĻāĻŋā§Ÿā§‡ āϧāϰ⧋

import { Suspense } from "react";
 
<Suspense fallback={<p>âŗ Loading...</p>}>
  <MarkdownPreview markdown="Hello, **world**!" />
</Suspense>;

📌 āĻāχ fallback UI āĻšāĻšā§āϛ⧇ āφāĻĒāύāĻžāϰ loading spinner āĻŦāĻž skeletonāĨ¤ MarkdownPreview āϝāϤāĻ•ā§āώāĻŖ āύāĻž āφāϏāϛ⧇, React āĻāχ fallback āĻĻ⧇āĻ–āĻžāĻŦ⧇āĨ¤


🎮 āϚāϞ āĻāĻ•āϟāĻž āĻŦāĻžāĻ¸ā§āϤāĻŦ āωāĻĻāĻžāĻšāϰāĻŖ āĻŦāĻžāύāĻžāχ

✅ āφāĻĒāύāĻŋ āϚāĻžāχāϛ⧇āύ, Preview āĻŦāĻžāϟāύ āϚāĻžāĻĒāϞ⧇āχ Lazy Component āϞ⧋āĻĄ āĻšā§‹āĻ•

import React, { lazy, Suspense, useState } from "react";
 
const MarkdownPreview = lazy(() => import("./MarkdownPreview.js"));
 
function App() {
  const [showPreview, setShowPreview] = useState(false);
 
  return (
    <div>
      <h1>React Lazy Loading Example</h1>
      <button onClick={() => setShowPreview((prev) => !prev)}>
        Toggle Preview
      </button>
      <hr />
      {showPreview && (
        <Suspense fallback={<p>🌀 Loading preview...</p>}>
          <h2>Preview</h2>
          <MarkdownPreview markdown="Hello, **world**!" />
        </Suspense>
      )}
    </div>
  );
}

đŸŽ¯ āĻāĻ–āύ āϕ⧀ āĻšāĻŦ⧇?

  • āĻĒā§āϰāĻĨāĻŽā§‡ MarkdownPreview.js āĻĢāĻžāχāϞ āϞ⧋āĻĄ āĻšāĻŦ⧇ āύāĻž
  • āĻŦāĻžāϟāύ āĻ•ā§āϞāĻŋāĻ• āĻ•āϰāϞ⧇ React āĻŦ⧁āĻāĻŦ⧇: āĻ“āĻš! āĻāχ āĻ•āĻŽā§āĻĒā§‹āύ⧇āĻ¨ā§āϟ āĻĻāϰāĻ•āĻžāϰ
  • āϤāĻ–āύ āĻĢāĻžāχāϞ āĻĄāĻžāχāύāĻžāĻŽāĻŋāĻ•āĻžāϞāĻŋ āχāĻŽā§āĻĒā§‹āĻ°ā§āϟ āĻšāĻŦ⧇
  • āϝāϤāĻ•ā§āώāĻŖ āύāĻž āĻšā§Ÿ, fallback āĻĻ⧇āĻ–āĻžāĻŦ⧇

💡 āϛ⧋āĻŸā§āϟ āĻŸā§āϰāĻŋāĻ•: āĻĄāĻžāχāύāĻžāĻŽāĻŋāĻ•āϞāĻŋ āϝ⧇āϕ⧋āύ⧋ āĻ•āĻŽā§āĻĒā§‹āύ⧇āĻ¨ā§āϟ āϞ⧋āĻĄ āĻ•āϰ⧋

import { lazy } from "react";
 
export function importDemo(file) {
  return lazy(() => import(`../components/${file}.js`));
}
const DemoComponent = importDemo("ColorDemo");

đŸ§Ē āĻāĻ•āϟāĻŋ āĻŽāϜāĻžāϰ Example App

  • āφāĻĒāύāĻŋ āĻāĻ•āϟāĻž āĻŦāĻžāϟāύ⧇ āĻ•ā§āϞāĻŋāĻ• āĻ•āϰāϛ⧇āύ
  • āĻļ⧁āϧ⧁ āϏ⧇āχ āĻ•āĻŽā§āĻĒā§‹āύ⧇āĻ¨ā§āĻŸā§‡āϰ āĻĢāĻžāχāϞāχ āϞ⧋āĻĄ āĻšāĻšā§āϛ⧇
  • Network āĻŸā§āϝāĻžāĻŦ āϖ⧁āϞ⧇ āĻĻ⧇āϖ⧁āύ, āĻŦ⧁āĻāϤ⧇ āĻĒāĻžāϰāĻŦ⧇āύ live!

✅ Best Practice

āϭ⧁āϞāĻ āĻŋāĻ•
āĻ•āĻŽā§āĻĒā§‹āύ⧇āĻ¨ā§āĻŸā§‡āϰ āĻ­āĻŋāϤāϰ⧇ lazy()āĻĢāĻžāχāϞ⧇āϰ āĻŦāĻžāχāϰ⧇ āϟāĻĒ āϞ⧇āϭ⧇āϞ⧇
Error handling āύāĻž āĻ•āϰāĻžAlways wrap in ErrorBoundary
āϏāĻŦ āĻ•āĻŋāϛ⧁ lazy āĻ•āϰ⧇ āĻĢ⧇āϞāĻžāĻļ⧁āϧ⧁ āϝ⧇āϗ⧁āϞ⧋ āĻĻ⧇āϰāĻŋāϤ⧇ āĻĻāϰāĻ•āĻžāϰ, āϏ⧇āϗ⧁āϞ⧋ lazy āĻ•āϰ⧋

đŸ›Ąī¸ ErrorBoundary āĻŦā§āϝāĻŦāĻšāĻžāϰ āύāĻž āĻ•āϰāϞ⧇?

āϝāĻĻāĻŋ āϞ⧇āϜāĻŋ āĻĢāĻžāχāϞ āϞ⧋āĻĄ āύāĻž āĻšā§Ÿ (āϝ⧇āĻŽāύ āύ⧇āϟāĻ“ā§ŸāĻžāĻ°ā§āĻ• error), āϤāĻ–āύ āĻ…ā§āϝāĻžāĻĒ āĻ•ā§āĻ°ā§āϝāĻžāĻļ āĻ•āϰāϤ⧇ āĻĒāĻžāϰ⧇āĨ¤ āĻāϜāĻ¨ā§āϝ:

<ErrorBoundary>
  <Suspense fallback={<Loading />}>
    <MyLazyComponent />
  </Suspense>
</ErrorBoundary>

⚡ āύ⧇āĻ•ā§āϏāϟ.āĻœā§‡āĻāϏ⧇ āϤāĻžāĻšāϞ⧇ āĻĻāϰāĻ•āĻžāϰ āύāĻžāχ?

āĻšā§āϝāĻžāρ, Next.js by default route-based lazy loading āĻ•āϰ⧇āĨ¤ āϤāĻŦ⧁āĻ“, āϝāĻĻāĻŋ āφāĻĒāύāĻŋ āϕ⧋āύ⧋ modal, preview, āĻŦāĻž chart.js heavy āĻ•āĻŽā§āĻĒā§‹āύ⧇āĻ¨ā§āϟ lazy āĻ•āϰāϤ⧇ āϚāĻžāĻ¨â€”āĻāϟāĻž āϤāĻ–āύāĻ“ āϜāϰ⧁āϰāĻŋāĨ¤


đŸ§ŧ āϏāĻžāϰāĻžāĻ‚āĻļ

āĻļāĻŋāĻ–āϞāĻžāĻŽāĻŽāĻžāύ⧇
React.lazy()āĻ•āĻŽā§āĻĒā§‹āύ⧇āĻ¨ā§āϟ āĻļ⧁āϧ⧁ āĻĻāϰāĻ•āĻžāϰ āĻšāϞ⧇ āϞ⧋āĻĄ
Suspense fallbackāϝāĻ–āύ āϞ⧋āĻĄāĻŋāĻ‚ āĻšāĻšā§āϛ⧇, āϤāĻ–āύ āϕ⧀ āĻĻ⧇āĻ–āĻžāĻŦ
Lazy āĻĢāĻžāχāϞ default export āĻšāϤ⧇ āĻšāĻŦ⧇āύāĻž āĻšāϞ⧇ āϚāϞāĻŦ⧇ āύāĻž
āĻĢāĻžāχāϞ⧇āϰ āĻŦāĻžāχāϰ⧇ lazy()āύāĻž āĻšāϞ⧇ āĻŦāĻžāϰāĻŦāĻžāϰ āϰ⧇āĻ¨ā§āĻĄāĻžāϰ āĻšāĻŦ⧇
ErrorBoundaryfallback āĻāϰāϰ āϧāϰāϤ⧇ āϏāĻšāĻžā§Ÿ

âœī¸ āĻļ⧇āώ āĻ•āĻĨāĻž

React Lazy Loading āĻšāĻšā§āϛ⧇ āφāĻĒāύāĻžāϰ āĻ…ā§āϝāĻžāĻĒāϕ⧇ “āĻŦ⧁āĻĻā§āϧāĻŋāĻŽāĻžāĻ¨â€ āĻŦāĻžāύāĻžāύ⧋āϰ āωāĻĒāĻžā§ŸāĨ¤ āϝ⧇āϟāĻž āĻŦāĻ˛ā§‡â€”â€œāφāĻŽāĻŋ āϏāĻŦ āϜāĻžāύāĻŋ āύāĻž, āĻ•āĻŋāĻ¨ā§āϤ⧁ āϝ⧇āϟ⧁āϕ⧁ āĻĻāϰāĻ•āĻžāϰ, āĻ“āϟ⧁āϕ⧁āχ āĻļāĻŋāĻ–āĻŋ, āϤāĻžāĻ“ āϏāĻŽā§ŸāĻŽāϤ⧋āĨ¤â€ 😄


Š 2024 - 2026 React JS Bangla Tutorial.