مستوى المقال: مبتدئ
Lazy Loading للصور: حمّل 12 صورة بدل 200 وقدّم الصفحة في 1.8 ثانية بدل 6.4
لو صفحة منتجات عندك فيها 200 صورة والمتصفح بيحمّلهم كلهم في أول زيارة، الزائر بيستنى 6 ثواني لحد ما الصفحة تخلص. إضافة كلمة loading="lazy" على تاج الصورة بتنزل الزمن ده لـ 1.8 ثانية. مش حيلة، ولا ضبط معقّد. سطر واحد في HTML.
المشكلة باختصار
المتصفح بطبيعته بيحاول يحمّل كل صورة في الصفحة قبل ما يخلّص الـ rendering بشكل مريح للزائر. لو عندك متجر إلكتروني فيه 200 منتج، ده معناه 200 طلب شبكة في أول ثواني. الـ bandwidth بيتقسّم على 200 طلب، والصور اللي الزائر هيشوفها فعلاً (أول 4 منتجات) بتتأخر لأنها بتزاحم 196 صورة هو مش هيشوفهم أبدًا في 70% من الزيارات حسب إحصاءات الـ Chrome User Experience Report.
خلّينا نفهم المشكلة بمثال — مكتبة الكتب
تخيّل إنك دخلت مكتبة كبيرة فيها 200 كتاب على رف، وعايز تقرأ أول 4 كتب بس. الطريقة العادية إن أمين المكتبة يجيب لك كل الـ 200 كتاب على الترابيزة ويقعد يرتّبهم نص ساعة قبل ما تمسك أول كتاب. الطريقة المنطقية إنه يجيب 4 كتب بس، ويجيب الباقي لما تطلبهم بنفسك.
Lazy Loading بيعمل بالظبط الكلام ده. المتصفح بيحمّل الصور اللي ظاهرة في الـ viewport (الجزء اللي الزائر شايفه دلوقتي على الشاشة)، والصور اللي تحت بيأجّل تحميلها لحد ما الزائر يعمل scroll قريب منها.
التعريف العلمي الدقيق
Lazy Loading هو نمط برمجي بيأجّل تحميل الـ resources لحد لحظة الاحتياج الفعلي بدلاً من تحميلها كلها في وقت الـ initial load. متصفحات Chrome (75+) و Firefox (75+) و Safari (15.4+) و Edge بتدعم native lazy loading عبر الـ attribute loading="lazy" على عنصري <img> و <iframe>. المتصفح بيستخدم Intersection Observer داخليًا، وبيبدأ تحميل الصورة لما تكون على بُعد يتراوح بين 1250px و 3000px من الـ viewport (الرقم بيتغيّر حسب نوع الشبكة وـ Data Saver mode).
الكود الفعلي — السطر الواحد اللي بيحل المشكلة
<!-- قبل -->
<img src="/products/item-001.jpg" alt="منتج رقم 1">
<!-- بعد -->
<img
src="/products/item-001.jpg"
alt="منتج رقم 1"
loading="lazy"
width="400"
height="300">
لاحظ width و height. لازم تحطهم. لو مش عارف الـ aspect ratio، هيحصل layout shift والـ Cumulative Layout Shift (CLS) هيرتفع لقيمة سيئة في Core Web Vitals. ده بيهدّ نص فايدة الـ lazy loading.