چطور با معلق نگه داشتن تصاویر و ویدیوهای خارج از دید کاربر، سرعت اولیهی صفحه را تا ۸۵٪ بالا ببریم
در حالت عادی، مرورگر همهی تصاویر، ویدیوها و اسکریپتهای یک صفحه را بهمحض ورود کاربر دانلود میکند — حتی محتوایی که در انتهای صفحه است و شاید کاربر هیچوقت به آن نرسد.
هیچ منبعی را دانلود نکن مگر اینکه کاربر به آن نزدیک شده باشد. در این تکنیک، منابع خارج از دید کاربر (خارج از Viewport) تا لحظهی اسکرول به حالت معلق باقی میمانند.
برای درک تأثیر عملی، صفحهای با ۵۰ تصویر محصول را در نظر بگیرید.
این اعداد برای یک صفحهی پرتصویر با تصاویر بهینهنشده است. میزان بهبود به تعداد تصاویر، حجمشان و سرعت اینترنت کاربر بستگی دارد — پس قبل و بعد را روی سایت خودت اندازه بگیر، نه اینکه فرض کنی.
سادهترین راه و بدون یک خط جاوااسکریپت: کافی است صفت loading="lazy" را به تگهای img یا iframe اضافه کنی. همهی مرورگرهای مدرن پشتیبانی میکنند.
تعیین width و height اجباری است. بدون آنها مرورگر جای تصویر را از قبل نمیداند و هنگام لود، محتوا ناگهان میپرد. این همان مشکل CLS است که گوگل برایش جریمهی سئو در نظر میگیرد.
اگر میخواهی زمان بارگذاری را خودت کنترل کنی — مثلاً تصویر ۲۰۰ پیکسل قبل از رسیدن اسکرول کاربر لود شود تا هیچوقت جای خالی نبیند — از این API بومی جاوااسکریپت استفاده کن.
بعد از لود شدن تصویر، دیگر دلیلی برای رصد کردنش نیست. بدون این خط، observer تا آخر عمر صفحه همهی تصاویر را زیر نظر میگیرد و بیجهت منابع مصرف میکند.
در پروژههای جاوااسکریپتی، کامپوننتهای سنگین یا مودالهایی که شاید هیچوقت باز نشوند را فقط هنگام نیاز بارگذاری کن تا حجم فایل اصلی (Bundle Size) کم شود.
همان منطق را میشود روی داده هم اعمال کرد: وقتی کاربر به انتهای صفحه نزدیک شد، صفحهی بعدی داده را بگیر.
رویداد scroll دهها بار در ثانیه اجرا میشود. در پروژهی واقعی حتماً آن را با debounce یا throttle کنترل کن، یا بهتر از آن، همان IntersectionObserver را روی یک عنصر نگهبان در انتهای فهرست بگذار — هم دقیقتر است هم سبکتر.
تا وقتی تصویر لود نشده، کاربر نباید کادر سفید خالی ببیند. یک انیمیشن سادهی نبض، حس «در حال بارگذاری» میدهد و انتظار را کوتاهتر نشان میدهد.
loading="lazy" گذاشتن روی تصویر اصلی بالای صفحه. خیلیها آن را روی همهی تصاویر سایت اعمال میکنند و بعد تعجب میکنند که چرا نمرهی سرعتشان بدتر شد. تصویری که کاربر بدون اسکرول میبیند، باید هرچه سریعتر لود شود.
بارگذاری تنبل یکی از کمهزینهترین بهینهسازیهاست: برای اکثر سایتها فقط یک صفت HTML لازم است. قاعدهی ساده این است — هرچه کاربر بدون اسکرول میبیند را فوری لود کن، بقیه را تا لحظهی نیاز معلق نگه دار. و بعد از هر تغییر، با Lighthouse یا تب Network اندازه بگیر تا مطمئن شوی واقعاً بهتر شده.