در دنیای وب امروز، سرعت حرف اول را میزند. کاربرانی که با صفحات کند مواجه میشوند، به سادگی وبسایت شما را ترک میکنند. یکی از بزرگترین عوامل کندی وبسایتها، تصاویر حجیم هستند. اما راه حل چیست؟ «بارگذاری تنبل» یا Lazy Loading یک تکنیک هوشمندانه است که بارگذاری تصاویر را تا زمانی که کاربر به آنها نزدیک شود، به تعویq میاندازد. این کار نه تنها سرعت اولیه بارگذاری صفحه را به شدت افزایش میدهد، بلکه در مصرف پهنای باند کاربران نیز صرفهجویی میکند.
در این مقاله، پنج روش موثر برای پیادهسازی بارگذاری تنبل تصاویر را بررسی خواهیم کرد تا بتوانید عملکرد وبسایت خود را به سطح بالاتری ببرید.
قبل از پرداختن به تکنیکها، بیایید ببینیم چرا باید به این موضوع اهمیت بدهیم. بارگذاری تمام تصاویر یک صفحه، به خصوص صفحات طولانی با گالریهای بزرگ، میتواند تجربه کاربری را نابود کند.
اکنون که با اهمیت موضوع آشنا شدیم، بیایید به سراغ روشهای عملی پیادهسازی برویم.
سادهترین و مدرنترین روش، استفاده از ویژگی بومی HTML است. مرورگرهای جدید به شما اجازه میدهند تا تنها با افزودن یک ویژگی ساده، بارگذاری تنبل را فعال کنید.
کافی است ویژگی loading="lazy" را به تگ <img> خود اضافه کنید:
<img src="image.jpg" loading="lazy" alt="یک تصویر زیبا از طبیعت" width="600" height="400">
مزایا: پیادهسازی فوقالعاده آسان و بدون نیاز به جاوا اسکریپت. مرورگر به طور هوشمندانه تصمیم میگیرد که چه زمانی تصویر را بارگذاری کند.
معایب: این ویژگی در مرورگرهای قدیمیتر پشتیبانی نمیشود، بنابراین برای پوشش کامل کاربران به یک راه حل جایگزین (fallback) نیاز خواهید داشت.
این API مدرن جاوا اسکریپت، روشی بسیار کارآمد برای تشخیص اینکه یک المان وارد کادر دید (viewport) کاربر شده است یا خیر، ارائه میدهد. برخلاف روشهای قدیمی که به رویداد scroll وابسته بودند، Intersection Observer عملکرد بسیار بهتری دارد و منابع سیستم را هدر نمیدهد.
مراحل کار به این صورت است:
data-src قرار دهید و src را با یک تصویر جایگزین (placeholder) کمحجم پر کنید.data-src را به src منتقل کنید تا بارگذاری آغاز شود.در زیر یک نمونه کد ساده آورده شده است:
document.addEventListener("DOMContentLoaded", function() {
const lazyImages = [].slice.call(document.querySelectorAll("img.lazy"));
if ("IntersectionObserver" in window) {
let lazyImageObserver = new IntersectionObserver(function(entries, observer) {
entries.forEach(function(entry) {
if (entry.isIntersecting) {
let lazyImage = entry.target;
lazyImage.src = lazyImage.dataset.src;
lazyImage.classList.remove("lazy");
lazyImageObserver.unobserve(lazyImage);
}
});
});
lazyImages.forEach(function(lazyImage) {
lazyImageObserver.observe(lazyImage);
});
} else {
// Fallback for older browsers
}
});
اگر نمیخواهید چرخ را از اول اختراع کنید، کتابخانههای آماده زیادی برای این کار وجود دارند. این کتابخانهها معمولاً بسیار بهینهسازی شدهاند، از مرورگرهای مختلف پشتیبانی میکنند و ویژگیهای اضافی مانند بارگذاری تنبل ویدیوها یا پسزمینهها را نیز ارائه میدهند.

برخی از کتابخانههای محبوب عبارتند از:
برای استفاده از `lazysizes`، کافی است اسکریپت آن را به صفحه اضافه کرده و کلاس `lazyload` را به تصاویر خود بدهید. به همین سادگی!
این روش بهترین رویکرد برای محیطهای واقعی (Production) است. در این حالت، شما از مزایای بارگذاری تنبل بومی بهره میبرید و همزمان با یک اسکریپت جاوا اسکریپت (مانند Intersection Observer) از کاربرانی که مرورگرهای قدیمیتر دارند، پشتیبانی میکنید.
میتوانید با یک قطعه کد کوتاه بررسی کنید که آیا مرورگر از بارگذاری تنبل بومی پشتیبانی میکند یا خیر:
if ('loading' in HTMLImageElement.prototype) {
// Browser supports native lazy loading
const images = document.querySelectorAll('img[loading="lazy"]');
images.forEach(img => {
img.src = img.dataset.src;
});
} else {
// Fallback to a JavaScript-based solution
// (e.g., using Intersection Observer)
}
با این روش، شما عملکرد بهینه را برای کاربران مدرن تضمین میکنید و هیچ کاربری را از دست نمیدهید.
این روش که اکنون منسوخ شده است، از رویدادهای جاوا اسکریپت مانند scroll، resize و orientationChange برای بررسی موقعیت تصاویر استفاده میکرد. مشکل اصلی این روش، فراخوانی مکرر تابع رویداد در حین اسکرول کردن کاربر است که میتواند منجر به مشکلات عملکردی و کندی رابط کاربری شود.
اگرچه امروزه استفاده از آن توصیه نمیشود، اما دانستن آن برای درک تکامل تکنیکهای وب و کار با کدهای قدیمی مفید است.
width و height) تصاویر خود را مشخص کنید. این کار از پرش محتوا در هنگام بارگذاری تصویر جلوگیری میکند که یک فاکتور مهم در Core Web Vitals گوگل است.loading="eager" برای این تصاویر استفاده کنید.<noscript> برای قرار دادن نسخه کامل تگ <img> استفاده کنید تا موتورهای جستجو حتماً تصویر شما را ببینند.بارگذاری تنبل تصاویر دیگر یک گزینه لوکس نیست، بلکه یک ضرورت برای ساخت وبسایتهای مدرن و سریع است. با پیادهسازی صحیح این تکنیک، نه تنها رضایت کاربران خود را جلب میکنید، بلکه رتبه بهتری نیز در موتورهای جستجو کسب خواهید کرد. برای شروع، ترکیب بارگذاری تنبل بومی با یک جایگزین مبتنی بر Intersection Observer، بهترین و کاملترین راه حل است.