Поле interactionTarget и определение элемента

Web Vitals — это набор метрик, предназначенных для оценки качества пользовательского опыта на веб-странице. Одним из ключевых аспектов анализа является взаимодействие пользователя с элементами интерфейса. Метрика First Input Delay (FID) и её современный аналог Interaction to Next Paint (INP) используют поле interactionTarget для точного определения, на каком элементе произошло событие взаимодействия.


Назначение поля interactionTarget

interactionTarget — это свойство события, возвращаемого функциями библиотеки Web Vitals. Оно указывает на DOM-элемент, с которым пользователь взаимодействовал в момент первого ввода. Полезно для аналитики, так как позволяет:

  • Выявлять элементы, на которых пользователи испытывают задержки при взаимодействии.
  • Связывать метрики производительности с конкретными компонентами интерфейса.
  • Улучшать пользовательский опыт за счёт оптимизации элементов с высокой задержкой отклика.

interactionTarget особенно актуально для метрики INP, которая учитывает все взаимодействия пользователя, а не только первое.


Тип значения и структура

Поле interactionTarget возвращает объект типа EventTarget, который обычно является DOM-элементом, например:

buttonElement, inputElement, aElement

В большинстве случаев это объект HTMLElement, что позволяет работать с ним так же, как с любым стандартным элементом DOM:

const vitalsCallback = (metric) => {
    if (metric.name === 'INP') {
        const element = metric.entries[0].interactionTarget;
        console.log('Элемент взаимодействия:', element.tagName, element.id);
    }
};

Если взаимодействие произошло вне DOM (например, на документе или body), interactionTarget может ссылаться на document или window, поэтому всегда необходимо проверять тип объекта перед дальнейшими манипуляциями.


Связь с метриками

  1. FID (First Input Delay)

    • Отслеживает первое взаимодействие пользователя (клик, клавиша, касание).
    • interactionTarget показывает элемент, с которым пользователь пытался взаимодействовать.
    • Значение критично для выявления блокирующих скриптов и оптимизации отклика.
  2. INP (Interaction to Next Paint)

    • Более современная и комплексная метрика.
    • Учитывает все взаимодействия на странице, а не только первое.
    • Использует массив событий, каждый из которых имеет interactionTarget, что позволяет создавать карты задержек по элементам.

Практическое использование

Пример регистрации INP с определением элементов:

import { onINP } from 'web-vitals';

onINP((metric) => {
    metric.entries.forEach((entry) => {
        const element = entry.interactionTarget;
        const elementId = element.id || 'без id';
        console.log(`INP: задержка ${entry.duration}ms на элементе <${element.tagName} id="${elementId}">`);
    });
});

Особенности и рекомендации:

  • Не всегда у элементов есть id. Для аналитики полезно использовать data-* атрибуты или классы.
  • Проверять наличие interactionTarget перед использованием, чтобы избежать ошибок при взаимодействии вне DOM.
  • Можно объединять с инструментами трассировки производительности, например, PerformanceObserver, для детального анализа.

Определение элемента и обход ограничений

  • Прямое использование: entry.interactionTarget возвращает HTMLElement. Можно получать его атрибуты, текст, родительские элементы.
  • Обход динамических элементов: если элемент создаётся динамически или скрыт, interactionTarget всё равно указывает на элемент в момент взаимодействия, что позволяет отследить проблемные зоны в интерфейсе.
  • Обработка событий делегированием: при использовании делегирования событий важно проверять entry.interactionTarget для точного понимания, какой дочерний элемент был активирован.

Интеграция с аналитикой

Использование interactionTarget в связке с аналитическими платформами позволяет:

  • Создавать тепловые карты взаимодействия, где визуализируются элементы с высокой задержкой отклика.
  • Отслеживать UX-баги, например, кнопки, которые кажутся интерактивными, но имеют задержку.
  • Проводить A/B тестирование элементов интерфейса, измеряя изменение задержек по конкретным DOM-элементам.

interactionTarget является ключевым инструментом для глубокого анализа взаимодействий пользователя, позволяя не только фиксировать задержку, но и связывать её с конкретными компонентами интерфейса для последующей оптимизации.