Zepto.js — это лёгкая JavaScript-библиотека, созданная как облегчённая альтернатива jQuery, ориентированная на работу с мобильными и современными браузерами. Одной из мощных возможностей Zepto является работа с отложенной загрузкой ресурсов и данных, что позволяет оптимизировать производительность веб-приложений.
Отложенная загрузка (lazy loading) подразумевает загрузку данных или элементов только в момент их непосредственного использования. В контексте Zepto это чаще всего реализуется через:
Использование отложенной загрузки снижает нагрузку на сеть и ускоряет отображение страницы, загружая только необходимое содержимое.
Zepto предоставляет метод $.ajax, а также сокращённые
версии $.get и $.post для асинхронного
взаимодействия с сервером. Применение отложенной загрузки предполагает
вызов этих методов только в момент, когда данные действительно
нужны.
Пример динамической подгрузки списка пользователей при прокрутке страницы:
var page = 1;
var loading = false;
$(window).on('scroll', function() {
if (loading) return;
if ($(window).scrollTop() + $(window).height() > $(document).height() - 100) {
loading = true;
$.get('/users?page=' + page, function(data) {
var html = '';
data.users.forEach(function(user) {
html += '<div class="user">' + user.name + '</div>';
});
$('#user-list').append(html);
page++;
loading = false;
});
}
});
В этом примере:
scrollTop и height используются для
определения момента, когда пользователь приближается к концу
страницы.loading защищает от повторных параллельных
запросов.Частая задача — загрузка медиафайлов только тогда, когда они видимы пользователю. В Zepto это можно реализовать через событие прокрутки и проверку позиции элемента:
function lazyLoad() {
$('.lazy').each(function() {
var $img = $(this);
if ($img.offset().top < $(window).scrollTop() + $(window).height()) {
$img.attr('src', $img.data('src'));
$img.removeClass('lazy');
}
});
}
$(window).on('scroll', lazyLoad);
$(document).ready(lazyLoad);
Здесь:
data-src для хранения URL
изображения до его загрузки.offset().top определяет положение элемента на
странице.lazy предотвращает повторную проверку
уже загруженных изображений.Zepto позволяет создавать элементы на лету с помощью метода
$('<tag>'). Это часто сочетается с отложенной
загрузкой, когда DOM-структура формируется только при необходимости:
function loadMoreItems(items) {
items.forEach(function(item) {
var $el = $('<div class="item"></div>').text(item.name);
$('#item-container').append($el);
});
}
Такой подход сокращает начальное время рендеринга и позволяет управлять памятью, создавая только нужные элементы.
Для эффективной отложенной загрузки полезно использовать события Zepto:
scroll — отслеживание прокруткиtouchmove — оптимизация для мобильных устройствresize — пересчёт видимых элементов при изменении
размеров окнаПример комбинированного подхода:
function updateVisibleImages() {
$('.lazy').each(function() {
var $img = $(this);
var top = $img.offset().top;
var bottom = top + $img.height();
var viewTop = $(window).scrollTop();
var viewBottom = viewTop + $(window).height();
if (bottom > viewTop && top < viewBottom) {
$img.attr('src', $img.data('src')).removeClass('lazy');
}
});
}
$(window).on('scroll resize touchmove', updateVisibleImages);
$(document).ready(updateVisibleImages);
Этот подход обеспечивает адаптивность: изображения загружаются при изменении размера окна, прокрутке или на мобильных жестах.
При массовой отложенной загрузке рекомендуется:
scroll и resize, чтобы снизить
количество вызовов функции проверки видимости.Пример простой функции троттлинга:
function throttle(fn, wait) {
var time = Date.now();
return function() {
if ((time + wait - Date.now()) < 0) {
fn();
time = Date.now();
}
};
}
$(window).on('scroll', throttle(updateVisibleImages, 200));
Такой приём предотвращает частые вызовы функции при интенсивной прокрутке и снижает нагрузку на браузер.
Использование Zepto в сочетании с отложенной загрузкой позволяет создавать быстрые, отзывчивые и лёгкие веб-приложения, минимизируя потребление ресурсов и улучшая пользовательский опыт.