Библиотека ally.js в первую очередь предназначена для управления доступностью элементов веб-страницы. В контексте кеширования запросов она предоставляет удобные механизмы для хранения и повторного использования результатов анализа доступности элементов, что повышает производительность при многократных проверках.
ally.js использует внутренний объект кеша для хранения результатов вызовов своих функций. Это позволяет избежать повторного вычисления сложных операций, например, определения видимости или фокусируемости элементов.
Принцип работы кеша:
isFocusable, isTabbable,
isVisible, сохраняются в кеш.import ally from 'ally.js';
// Получение всех фокусируемых элементов с кешированием
const focusableElements = ally.query.focusable({ context: document.body });
// Второй вызов для того же контекста использует кеш
const cachedFocusable = ally.query.focusable({ context: document.body });
console.log(focusableElements === cachedFocusable); // true
В данном примере первый вызов функции focusable проводит
полный анализ DOM. Второй вызов возвращает ранее вычисленный результат
из кеша, что экономит ресурсы.
Очистка кеша важна при динамических изменениях DOM, чтобы данные не устаревали:
// Очистка всего кеша ally.js
ally.query.resetCache();
// Очистка кеша конкретного элемента
const element = document.getElementById('button1');
ally.query.resetCache(element);
Метод resetCache позволяет:
Использование кеша существенно ускоряет обработку больших страниц с многочисленными интерактивными элементами. При проверке доступности всей страницы без кеша каждая функция выполняет полный обход DOM, что может замедлить работу скриптов.
С кешем:
isFocusable, isTabbable)
выполняются только один раз.Ally.js поддерживает не только стандартные функции, но и создание кастомных запросов, результаты которых также можно кешировать:
// Пользовательская функция для проверки доступности элемента
function isCustomAccessible(element) {
const cached = ally.query.cache.get(element);
if (cached && cached.customAccessible !== undefined) {
return cached.customAccessible;
}
const result = element.offsetParent !== null && !element.disabled;
ally.query.cache.set(element, { customAccessible: result });
return result;
}
В этом примере используется прямой доступ к внутреннему объекту
cache, что позволяет сохранять пользовательские данные
вместе с кешем библиотеки.
Ally.js поддерживает автоматическое обновление данных при событиях,
влияющих на доступность элементов, таких как
DOMNodeInserted или изменения атрибутов. Однако для
динамических интерфейсов рекомендуется вручную управлять кешем через
resetCache для повышения предсказуемости работы.
Кеширование запросов в ally.js является критически важным инструментом для оптимизации производительности при проверке доступности элементов. Оно позволяет повторно использовать результаты вычислений, снижает нагрузку на DOM и обеспечивает корректную работу в динамических интерфейсах. Правильное управление кешем и сброс данных при изменениях DOM делает библиотеку эффективной для крупных проектов с множеством интерактивных элементов.