Unpoly — это библиотека, которая позволяет обновлять части страницы без полной перезагрузки. Одним из ключевых инструментов является условная загрузка, когда контент подгружается только при определённых условиях. Это повышает производительность, сокращает количество сетевых запросов и улучшает пользовательский опыт.
В Unpoly условная загрузка привязывается к таргету
(target). Таргет — это CSS-селектор, указывающий на элемент
страницы, который будет обновлён. Например:
<div id="comments"></div>
<a href="/posts/42/comments" up-target="#comments">Показать комментарии</a>
Событие клика по ссылке загрузит контент только в
элемент с id="comments". Если элемент отсутствует на
странице, запрос не будет выполнен, что позволяет избежать лишнего
трафика.
up-if и up-unlessДля условной загрузки Unpoly предоставляет два основных атрибута:
up-if — выполняет запрос, если выражение истинно.up-unless — выполняет запрос, если выражение
ложно.Примеры:
<a href="/notifications" up-target="#notification-panel" up-if="window.userLoggedIn">
Показать уведомления
</a>
<a href="/promo" up-target="#promo-banner" up-unless="window.promoDismissed">
Специальное предложение
</a>
Здесь загрузка панели уведомлений произойдет только если переменная
userLoggedIn равна true, а баннер акции —
только если promoDismissed не установлен.
up-on и up-delayUnpoly позволяет запускать условную загрузку по различным событиям, не ограничиваясь кликом:
up-on задаёт событие, на которое реагирует ссылка или
форма.up-delay откладывает выполнение запроса на указанное
количество миллисекунд.Пример:
<a href="/search/suggestions" up-target="#suggestions" up-on="input" up-delay="300">
Поиск
</a>
Такой код инициирует загрузку подсказок только после 300 мс паузы после ввода текста пользователем, что предотвращает избыточные запросы при каждом нажатии клавиши.
Атрибуты up-if и up-unless могут содержать
любой JS-код, который возвращает true или
false. Это позволяет создавать сложные логические
условия:
<a href="/dashboard/alerts" up-target="#alerts-panel"
up-if="window.notificationsEnabled && window.userRole === 'admin'">
Показать оповещения
</a>
Unpoly активно используется для ленивой подгрузки частей интерфейса — форм, таблиц, панелей уведомлений. Стратегия:
up-if и up-unless контролируют,
нужна ли загрузка.<div id="analytics-panel"></div>
<button up-target="#analytics-panel"
up-if="window.showAnalytics">
Загрузить аналитику
</button>
Контент панели будет подгружен только при выполнении условия
window.showAnalytics.
up-preload и кэшированиемUnpoly позволяет предварительно подгружать ресурсы без их
немедленного отображения. Атрибут up-preload работает
вместе с условной загрузкой:
<a href="/chat/messages" up-target="#chat" up-preload up-if="window.chatEnabled">
Чат
</a>
В этом случае запрос выполняется заранее, если условие истинно, но контент появится только при активации соответствующего элемента.
При условной загрузке важно учитывать ситуации, когда условие изменилось или элемент отсутствует. Unpoly предоставляет:
up:request:error для обработки ошибок.up-on-error для выполнения альтернативного
действия.Пример:
<a href="/user/profile" up-target="#profile" up-if="window.loggedIn"
up-on-error="alert('Не удалось загрузить профиль')">
Профиль
</a>
Если условие истинно, но запрос не удался, пользователь получит уведомление.
Условная загрузка хорошо сочетается с серверными проверками. Сервер может возвращать пустой блок, если данные не нужны, что снижает нагрузку на фронтенд:
<a href="/dashboard/widgets" up-target="#widgets" up-if="userHasWidgets">
Загрузить виджеты
</a>
На сервере проверяется userHasWidgets и формируется
ответ только при наличии данных. Это обеспечивает согласованность
фронтенда и бэкенда.
up-if и up-unless для
контроля сетевых запросов.up-delay для минимизации лишних
загрузок при динамическом вводе.up-preload для ускорения реакции
интерфейса.up-on-error или
события up:request:error.Условная загрузка в Unpoly обеспечивает точечное обновление интерфейса, экономит ресурсы и позволяет строить отзывчивые и гибкие веб-приложения. Она особенно полезна для ленивой подгрузки контента, сложной логики отображения и оптимизации производительности.