Unpoly — это библиотека, ориентированная на плавное обновление частей страницы без полной перезагрузки. Один из ключевых приёмов оптимизации интерфейсов — ленивая загрузка (lazy loading) контента. Она позволяет загружать данные только тогда, когда они действительно нужны пользователю, сокращая время первой отрисовки страницы и снижая нагрузку на сервер.
Ленивая загрузка в Unpoly строится на механизме целевых
фрагментов (target) и событий
навигации (up.*). Вместо того чтобы подгружать
весь контент сразу, можно определить контейнеры, которые будут
заполняться по мере необходимости.
Ключевые моменты:
up-target или селектором, переданным в
up.replace/up.append.up.request.up.requestМетод up.request позволяет программно инициировать
загрузку контента в указанный контейнер:
up.request('/comments', { target: '#comments-section' })
.then(response => {
console.log('Комментарии загружены');
})
.catch(error => {
console.error('Ошибка загрузки комментариев', error);
});
Параметры:
url — адрес запроса.target — селектор контейнера, куда будет вставлен
HTML.method — HTTP-метод (GET по
умолчанию).params — дополнительные параметры запроса.Для динамической подгрузки при скролле применяют событие
scroll или библиотечные расширения типа
up.fragment:visible. Пример:
up.on('fragment:visible', '#infinite-list', (event) => {
let container = event.target;
if (!container.dataset.loaded) {
up.request('/load-more', { target: container })
.then(() => { container.dataset.loaded = 'true'; });
}
});
Особенности:
dataset.loaded предотвращает повторные
запросы.fragment:visible срабатывает, когда элемент
появляется в зоне видимости.Ленивая загрузка особенно полезна для форм или виджетов, которые редко используются:
<button up-target="#user-form" up-href="/user-form" up-on="click">Показать форму</button>
<div id="user-form"></div>
Здесь Unpoly автоматически:
GET запрос на /user-form при
клике;#user-form на ответ
сервера;Можно добавить дополнительные опции:
<button up-target="#user-form"
up-href="/user-form"
up-transition="fade"
up-swap="outerHTML">Загрузить форму</button>
up-transition — плавная анимация появления.up-swap — определяет способ вставки контента
(outerHTML, innerHTML, after,
before).Чтобы уменьшить количество запросов при ленивой загрузке, Unpoly поддерживает кеширование фрагментов:
up.request('/notifications', { target: '#notifications', cache: true });
up.reload для обновления только
при необходимости.Unpoly предоставляет набор событий для контроля ленивой загрузки:
up:request — перед отправкой запроса.up:success — после успешного получения HTML.up:fail — при ошибке запроса.up:fragment:loaded — когда HTML фрагмента вставлен на
страницу.Пример с логированием и обработкой ошибок:
up.on('up:request', '#lazy-container', (event) => {
console.log('Запрос ленивой загрузки начат');
});
up.on('up:fail', '#lazy-container', (event) => {
console.error('Ошибка при загрузке фрагмента');
});
up-target и up-href
для кнопок и ссылок — это упрощает логику.Ленивая загрузка в Unpoly позволяет создавать динамические, отзывчивые интерфейсы без полной перезагрузки страниц, делая приложения более лёгкими, быстрыми и удобными для пользователя.