Библиотека Cash предоставляет компактный и эффективный инструмент для работы с DOM и данными в браузере, включая встроенные возможности кеширования выборок элементов и данных. Кеширование позволяет значительно повысить производительность приложения за счет повторного использования уже найденных элементов или результатов вычислений, вместо их повторного поиска или вычисления.
Cash реализует кеширование через внутренние структуры, где каждая выборка элементов сохраняется с привязкой к селектору или функции поиска. Это обеспечивает мгновенный доступ к ранее найденным элементам при повторном использовании того же селектора:
const items = $('.item'); // Первый поиск сохраняется в кеше
const sameItems = $('.item'); // Возвращает уже закешированный результат
В этом примере sameItems не выполняет новый поиск в DOM,
а использует уже сохранённый массив элементов, что сокращает время
выполнения и уменьшает нагрузку на браузер.
Cash позволяет создавать собственные кеши для любых вычислений, не
ограничиваясь только DOM-выборками. Для этого используется метод
data(), который хранит данные непосредственно на
элементе:
$('.item').each(function() {
$(this).data('computedValue', computeHeavyTask(this));
});
// Позже можно получить результат без повторного вычисления
const cachedValue = $('.item').first().data('computedValue');
Метод data не только хранит результаты, но и
обеспечивает автоматическое удаление данных при удалении элемента из
DOM, предотвращая утечки памяти.
Частые операции, такие как фильтрация, поиск потомков или вычисления атрибутов, можно кешировать с помощью вспомогательных структур:
const $listItems = $('.list-item');
const filteredCache = {};
$listItems.each(function() {
const type = $(this).attr('data-type');
if (!filteredCache[type]) filteredCache[type] = [];
filteredCache[type].push(this);
});
// Получение всех элементов с type='active'
const activeItems = filteredCache['active'];
Такой подход предотвращает повторные проходы по DOM и ускоряет выполнение скриптов на больших страницах.
Cash автоматически очищает кеш при удалении элементов, но иногда требуется ручное управление кешем для сложных сценариев:
const $buttons = $('.button');
$buttons.data('clicked', false);
// При необходимости сбросить кеш вручную
$buttons.removeData('clicked');
Метод removeData() удаляет сохранённые данные,
освобождая память и предотвращая конфликт устаревшей информации.
Cash поддерживает цепочки методов, и кеширование работает на каждом этапе цепочки:
const $activeButtons = $('.button')
.filter('.active')
.not('.disabled');
const cachedButtons = $activeButtons; // В дальнейшем можно повторно использовать
Цепочка методов выполняется один раз, а результат сохраняется в переменной, что позволяет многократно оперировать готовой выборкой без дополнительных проходов по DOM.
Использование кеша существенно отличается по производительности от стандартного поиска элементов:
document.querySelectorAll('.item') каждый раз обходит
DOM.$('.item') в Cash использует кеш, если селектор уже
применялся, возвращая сохранённый результат без обхода DOM.data для хранения промежуточных
вычислений, связанных с элементом.Кеширование в Cash — это мощный инструмент для оптимизации производительности веб-приложений. Оно сочетает простоту использования с высокой эффективностью, особенно на страницах с большим количеством интерактивных элементов и сложной логикой обработки данных.