Библиотека axe-core предназначена для автоматизированной проверки доступности веб-приложений. Она предоставляет программный API для анализа DOM и выявления проблем, связанных с WCAG (Web Content Accessibility Guidelines). В контексте оптимизации выполнения важно понимать, как настроить и интегрировать axe-core так, чтобы проверки не тормозили работу страницы и эффективно обрабатывали большие структуры DOM.
Для использования axe-core в браузере библиотека подключается через npm или CDN. При работе через npm:
import axe from 'axe-core';
axe.run(document, {
runOnly: {
type: 'tag',
values: ['wcag2a', 'wcag2aa']
},
resultTypes: ['violations', 'incomplete']
}).then(results => {
console.log(results.violations);
});
Ключевые моменты:
runOnly позволяет ограничить набор
правил для ускорения выполнения.resultTypes контролирует, какие типы
результатов возвращаются, сокращая лишние данные.Полный анализ всей страницы может быть затратным по времени. Для ускорения выполнения рекомендуется анализировать только необходимые узлы DOM:
const mainContent = document.querySelector('#main-content');
axe.run(mainContent, {
runOnly: ['wcag2aa']
}).then(results => {
console.log(results.violations);
});
Преимущества селективного анализа:
Axe-core позволяет отключать или настраивать отдельные правила для оптимизации:
axe.configure({
rules: [
{ id: 'color-contrast', enabled: true },
{ id: 'region', enabled: false } // отключаем редкое правило
]
});
Советы по оптимизации:
Для больших страниц полезно использовать асинхронные вызовы и промисы, чтобы не блокировать основной поток исполнения:
async function checkAccessibility(node) {
const results = await axe.run(node);
processViolations(results.violations);
}
Особенности:
При динамически изменяемых страницах повторные проверки могут быть избыточными. Axe-core предоставляет возможность кэширования узлов и результатов:
let previousResults = new WeakMap();
function runAxeOnNode(node) {
if (!previousResults.has(node)) {
axe.run(node).then(results => previousResults.set(node, results));
}
}
Эффект: снижение количества повторных вычислений, экономия ресурсов и времени.
Для автоматизированного тестирования в CI/CD можно комбинировать axe-core с Jest, Mocha или Cypress:
import { mount } from '@cypress/react';
it('проверка доступности компонента', () => {
mount(<MyComponent />);
cy.injectAxe();
cy.checkA11y({
runOnly: ['wcag2aa']
});
});
Оптимизационные моменты:
Axe-core поддерживает расширяемые конфигурации:
axe.run(document, {
context: '#modal',
runOnly: ['wcag21aa']
});
Преимущество: анализ только критически важных областей, что сокращает время выполнения и объем данных.
Для оценки оптимизации полезно измерять время выполнения:
const start = performance.now();
axe.run(document).then(results => {
const duration = performance.now() - start;
console.log(`Анализ завершен за ${duration} мс`);
});
Рекомендации:
Для страниц с динамическим контентом оптимально проверять доступность по мере загрузки элементов, а не ждать полной загрузки страницы:
const observer = new MutationObserver(mutations => {
mutations.forEach(mutation => {
axe.run(mutation.target);
});
});
observer.observe(document.body, { childList: true, subtree: true });
Эффект: минимизация нагрузки и поддержание актуальных данных о доступности без полного анализа страницы каждый раз.
Эффективное использование axe-core требует:
Такой подход позволяет сократить время выполнения и минимизировать влияние на производительность веб-приложения.