Tippy.js — это легковесная библиотека для создания всплывающих подсказок (tooltips) и поповер-элементов в JavaScript. На мобильных устройствах производительность имеет критическое значение, так как ограниченные ресурсы процессора и памяти могут заметно влиять на плавность интерфейса. Важнейшими аспектами являются инициализация, управление событиями, оптимизация рендеринга и контроль за количеством DOM-элементов.
На мобильных устройствах не рекомендуется создавать все тултипы сразу при загрузке страницы, особенно если их количество велико. Tippy.js поддерживает ленивую инициализацию:
tippy('[data-tippy-content]', {
lazy: true, // создаёт тултип только при первом взаимодействии
delay: [100, 50],
});
lazy: true откладывает создание
DOM-структуры до момента, когда тултип действительно нужен.delay предотвращают
лишние ререндеры при быстром касании экрана.Для списков с динамическим контентом или большим количеством элементов эффективнее использовать делегирование. Вместо того чтобы привязывать тултип к каждому элементу, Tippy.js позволяет управлять событиями через родительский контейнер:
tippy.delegate('#parent', {
target: '.child',
content(reference) {
return reference.getAttribute('data-tippy-content');
},
delay: [50, 30],
});
Преимущества делегирования:
На мобильных устройствах сенсорные события обрабатываются иначе, чем мышь на десктопе. Tippy.js позволяет тонко настраивать триггеры:
tippy('.button', {
trigger: 'click', // избегаем hover на мобильных
interactive: true,
});
Рекомендации по триггерам:
click или focus вместо
mouseenter/mouseleave.interactive: true,
чтобы пользователь мог взаимодействовать с контентом внутри
тултипа.Анимации могут значительно замедлять работу на слабых устройствах. В
Tippy.js анимации контролируются через
animation и
duration:
tippy('.icon', {
animation: 'shift-away', // лёгкая анимация без тяжелых трансформаций
duration: [100, 100], // минимальные задержки для плавности
});
Каждый тултип создаёт отдельный DOM-элемент. На мобильных устройствах важно контролировать их количество:
const instance = tippy('.button', { content: 'Пример' });
// при удалении элемента
instance.destroy();
destroy() освобождает память, удаляя
тултип из DOM.Для выявления узких мест Tippy.js можно использовать стандартные инструменты браузеров:
Практические рекомендации:
show() и
hide().requestAnimationFrame для сложных
обновлений интерфейса.Если тултипы применяются к длинным спискам (например, таблицам или бесконечным скроллам), стоит использовать виртуализацию элементов. Создание тултипа только для видимых элементов уменьшает нагрузку на рендеринг и память.
import { FixedSizeList as List } from 'react-window';
<List
height={400}
itemCount={1000}
itemSize={35}
>
{({ index, style }) => (
<div style={style} data-tippy-content={`Элемент ${index}`}></div>
)}
</List>
Каждая дополнительная библиотека для тултипов увеличивает нагрузку на мобильное устройство. Tippy.js оптимизирован для чистого Vanilla JS, и использование плагинов стоит ограничивать. При необходимости расширений рекомендуется проверять влияние на FPS и время отклика на сенсорные события.