Инкрементальный анализ в контексте библиотеки Axe-core представляет собой методологию проверки доступности веб-страниц, при которой анализ выполняется не на всей странице целиком, а только на изменённых или вновь добавленных элементах. Такой подход позволяет значительно оптимизировать производительность тестирования и интегрировать проверку доступности в динамические приложения с частыми DOM-изменениями.
Выборка целевых элементов Axe-core позволяет
ограничить область анализа конкретными DOM-элементами. Это достигается
через параметр context в методе axe.run. В
качестве значения можно передавать селекторы CSS, отдельные узлы DOM или
коллекции элементов. Пример использования:
const targetElement = document.querySelector('#dynamic-section');
axe.run(targetElement, {}, (err, results) => {
if (err) throw err;
console.log(results.violations);
});
Здесь анализ выполняется исключительно для блока с идентификатором
dynamic-section, игнорируя остальную часть
страницы.
Фильтрация правил и категорий Для ускорения
инкрементального анализа часто имеет смысл ограничивать набор правил или
категорий проверок. Axe-core поддерживает фильтрацию через параметр
runOnly:
const options = {
runOnly: {
type: 'tag',
values: ['wcag2a', 'wcag2aa']
}
};
axe.run(targetElement, options).then(results => {
console.log(results.violations);
});
Это позволяет сосредоточиться только на критичных нарушениях WCAG и исключить менее важные проверки.
Интеграция с MutationObserver Для веб-приложений
с динамическим интерфейсом удобно использовать
MutationObserver. Он позволяет отслеживать изменения DOM и
запускать инкрементальный анализ только для изменённых элементов.
const observer = new MutationObserver(mutations => {
mutations.forEach(mutation => {
mutation.addedNodes.forEach(node => {
if (node.nodeType === Node.ELEMENT_NODE) {
axe.run(node).then(results => {
console.log(results.violations);
});
}
});
});
});
observer.observe(document.body, { childList: true, subtree: true });
Такой подход исключает повторную проверку неизменённых частей страницы, снижая нагрузку на браузер и ускоряя выдачу результатов.
Axe-core предоставляет гибкий механизм настройки правил через
параметр rules. Можно отключать отдельные проверки или
модифицировать их параметры. Например, для игнорирования проверки
контрастности текста внутри определённого блока:
const options = {
rules: {
'color-contrast': { enabled: false }
}
};
axe.run(targetElement, options).then(results => {
console.log(results.violations);
});
Такой подход особенно полезен, когда известны специфические ограничения дизайна или стили, которые не требуют строгой проверки в реальном времени.
Результаты инкрементального анализа возвращаются в том же формате, что и полный анализ страницы. Основные объекты:
Для оптимизации интеграции можно хранить идентификаторы проверенных элементов и их текущий статус, чтобы при последующем анализе исключать элементы без изменений.
axe.run на изменяемых
компонентах.Инкрементальный подход к анализу доступности позволяет поддерживать высокие стандарты WCAG без ущерба производительности и интегрировать автоматизированные проверки непосредственно в жизненный цикл веб-приложений.