Shepherd.js — это библиотека для создания интерактивных пошаговых инструкций (туров) на веб-странице. Управление памятью в этой библиотеке играет ключевую роль при разработке сложных интерфейсов с множественными шагами и динамически изменяемыми элементами DOM. Основные аспекты касаются создания, хранения и очистки объектов тура, а также контроля за обработчиками событий.
Каждый тур в Shepherd.js создается через конструктор
new Shepherd.Tour(options). Этот объект содержит массив
шагов (steps), а также внутренние состояния:
const tour = new Shepherd.Tour({
defaultStepOptions: {
cancelIcon: { enabled: true },
scrollTo: { beh * avior: 'smooth', block: 'center' }
}
});
Ключевые моменты:
tour.addStep(name, options) и сохраняются в массиве
tour.steps. При множественных турах необходимо следить за
тем, чтобы старые туры удалялись, иначе объекты будут занимать
память.attachTo и
buttons, создают внутренние ссылки на DOM-элементы. Если
эти элементы динамически удаляются с страницы, необходимо
вручную отключать шаги перед удалением тура, иначе
появятся “висячие” ссылки на DOM.Shepherd.js активно использует события для управления переходами между шагами, а также для взаимодействия с пользовательским интерфейсом. Ключевые события включают:
show — шаг отображается на странице.hide — шаг скрывается.complete — тур завершен.cancel — тур отменен.tour.on('complete', () => {
console.log('Тур завершен');
});
Проблема утечек памяти возникает, если обработчики
остаются активными после удаления тура. Для корректного освобождения
памяти нужно использовать метод tour.off(event, handler)
или полностью удалять тур через tour.destroy().
Метод destroy полностью удаляет тур, освобождая
память:
tour.destroy();
Что делает destroy:
steps.Если тур используется повторно, рекомендуется после
destroy создавать новый объект, вместо повторного
использования старого.
Когда шаги привязаны к элементам, которые могут появляться или исчезать динамически, необходимо учитывать:
show() шага. Если элемент удален, шаг не будет отображен,
но ссылка останется.tour.removeStep(id) для предотвращения
накопления объектов в памяти.В проектах с большим числом шагов и туров полезно:
tour.cancel() и tour.destroy().advanceOn или when.const tour = new Shepherd.Tour({ defaultStepOptions: { scrollTo: true } });
tour.addStep('step1', {
text: 'Пример шага',
attachTo: { element: '#btn', on: 'bottom' }
});
// Показать шаг
tour.start();
// Завершить тур и очистить память
tour.on('complete', () => {
tour.destroy();
});
tour.on('cancel', () => {
tour.destroy();
});
Этот подход гарантирует, что после окончания тура ни один объект не останется в памяти, обработчики событий будут отключены, а DOM-элементы подсказок удалены.
Shepherd.js требует внимательного контроля за объектами тура, шагами и обработчиками событий. Ключевые правила:
destroy() после завершения или
отмены.Соблюдение этих принципов обеспечивает стабильность приложения и предотвращает утечки памяти при использовании Shepherd.js в сложных интерфейсах.