foundation
Lazy loading
Откладывайте below-the-fold images, routes, modules и data, защищая LCP и избегая layout shifts.
Lazy loading откладывает работу до момента, когда она вероятно понадобится. Изображения, компоненты, маршруты, данные и сторонние scripts можно грузить позже, но LCP-кандидат и код критичного взаимодействия нельзя задерживать случайно. Хорошие реализации резервируют место и дают предсказуемые состояния загрузки.
<img src="hero.jpg" fetchpriority="high" width="1200" height="630" alt="...">
<img src="thumb.jpg" loading="lazy" width="320" height="180" alt="...">
Dynamic import маршрутов и IntersectionObserver распространяют идею на JavaScript и данные. Всегда обрабатывайте ошибки и skeleton.
На интервью: нативный loading, IntersectionObserver, route splitting, skeletons и когда eager лучше.
Типовые ошибки: lazy hero бьёт по LCP; контент без размеров даёт CLS.
Компромисс: удобство против контроля — выбирайте механизм под вашу связность и бюджет производительности.
Чеклист:
- Не откладывайте LCP-элемент.
- Резервируйте width и height.
- Осознанные thresholds и rootMargin.
- UI загрузки и ошибок.