Skip to main content

Command Palette

Search for a command to run...

Eager Loading vs Lazy Loading

Updated
3 min readView as Markdown
Eager Loading vs Lazy Loading

Laravel-এ ডাটাবেসের সাথে কাজ করার সময় আমরা প্রায়ই সম্পর্কিত ডেটা লোড করতে হয়, যেমন একটি User এর Posts, বা একটি Order এর Items। এই ধরণের সম্পর্কিত ডেটা আমরা দুইভাবে লোড করতে পারি: Lazy Loading এবং Eager Loading। এই ব্লগে আমরা বুঝবো এই দুইটি কী, তাদের পার্থক্য, এবং কোনটা কবে ব্যবহার করা উচিত।


🔍 Lazy Loading কী?

Lazy Loading মানে হলো তখনই সম্পর্কিত ডেটা রিটার্ন হবে, যখন আপনি সেটা অ্যাক্সেস করবেন।

উদাহরণ:

$users = User::all();

foreach ($users as $user) {
    echo $user->posts; // এখানে প্রতিবার আলাদাভাবে query হচ্ছে
}

এখানে যখন আপনি $user->posts অ্যাক্সেস করছেন, তখনই Laravel আলাদা করে একটি Query রান করছে posts টেবিলের জন্য। অর্থাৎ, যদি ১০০ জন ইউজার থাকে, তবে ১০১টি Query রান হবে (১টি ইউজার লোড করার জন্য, ১০০টি তাদের পোস্ট লোড করার জন্য) — একে বলে N+1 Problem


⚡ Eager Loading কী?

Eager Loading ব্যবহার করলে আপনি আগেই বলে দেন Laravel কে, যে এই সম্পর্কিত ডেটাগুলাও একসাথে লোড করে আনো।

উদাহরণ:

$users = User::with('posts')->get();

foreach ($users as $user) {
    echo $user->posts; // এখানে অতিরিক্ত Query রান হবে না
}

এখানে Laravel দুইটি Query চালাবে:

  1. ইউজারদের জন্য একটি Query

  2. সেই ইউজারদের পোস্টগুলোর জন্য আরেকটি Query (যেখানে user_id অনুযায়ী ফিল্টার হবে)

এতে করে Laravel একবারেই দরকারি ডেটা গুলো নিয়ে আসবে, ফলে Performance অনেক ভালো হয়।


🆚 Eager Loading বনাম Lazy Loading তুলনা

বৈশিষ্ট্যLazy LoadingEager Loading
ডেটা লোড সময়প্রয়োজনের সময়আগেই সব ডেটা
Query সংখ্যাঅনেক বেশি (N+1 সমস্যা)কম (২-৩টি Query)
Performanceধীরগতিদ্রুত
Syntax$user->relationModel::with('relation')
ব্যবহার সময়যখন কম সংখ্যক রেকর্ডযখন অনেক ডেটা লাগবে

🧠 কবে Lazy Loading ব্যবহার করবেন?

  • যদি আপনি নিশ্চিত থাকেন, প্রতিটি রেকর্ডের সম্পর্কিত ডেটা সবসময় দরকার হবে না।

  • যদি আপনি শুধুমাত্র ১ বা ২টি রেকর্ড নিয়ে কাজ করছেন।

উদাহরণ:

$user = User::find(1);
echo $user->profile;

🚀 কবে Eager Loading ব্যবহার করবেন?

  • যখন আপনি অনেকগুলো রেকর্ডের সম্পর্কিত ডেটা একসাথে দরকার।

  • যখন আপনি N+1 Problem এVOID করতে চান।

উদাহরণ:

$orders = Order::with('items')->get();

foreach ($orders as $order) {
    echo $order->items;
}

🎯 Advanced: Nested Eager Loading

Laravel-এ আপনি একাধিক সম্পর্কও আগেই লোড করতে পারেন:

$users = User::with('posts.comments')->get();

এটি ইউজার, তাদের পোস্ট, এবং প্রতিটি পোস্টের কমেন্টস একসাথে নিয়ে আসবে।


🛑 N+1 Problem চিহ্নিত করা

Laravel এর debugbar বা Laravel Telescope ব্যবহার করে আপনি দেখতে পারবেন কতগুলো Query চালানো হচ্ছে। যদি দেখা যায় অপ্রয়োজনীয়ভাবে অনেক Query রান হচ্ছে, তাহলে নিশ্চিত থাকুন – Eager Loading দরকার!


Laravel-এ কাজ করার সময় পারফরম্যান্স ও কোডের দক্ষতা বৃদ্ধির জন্য Eager Loading ও Lazy Loading এর ব্যবহার খুব গুরুত্বপূর্ণ। Lazy Loading সহজ হলেও, ভুলভাবে ব্যবহারে পারফরম্যান্স খারাপ হতে পারে। অন্যদিকে, Eager Loading সঠিকভাবে ব্যবহার করলে Query এর সংখ্যা কমে গিয়ে অ্যাপ্লিকেশন আরও দ্রুত চলবে।

4 views

More from this blog

HTML-2026

HTML-কে আমরা সাধারণত ওয়েবের সবচেয়ে পুরোনো এবং স্থির প্রযুক্তিগুলোর একটি হিসেবে দেখি। CSS ও JavaScript যেখানে দ্রুত নতুন নতুন feature পাচ্ছে, HTML তুলনামূলকভাবে ধীরে পরিবর্তিত হয়। তবে ধীরে পরিবর্তন হওয়

Sep 3, 202612 min read2
HTML-2026
S

SliceTech

97 posts

Sharing basic web development tutorials.