Table of contents

Performance Issues

Хоук может автоматически отправлять performance-события через Performance API браузера.

Поддерживаются:

  • Long Tasks
  • Long Animation Frames

Long Tasks позволяет отслеживать длинные задачи в main thread браузера.

import HawkCatcher from '@hawk.so/browser'; const hawk = new HawkCatcher({ token: 'INTEGRATION_TOKEN', issues: { longTasks: true, }, });

Hawk создаёт PerformanceObserver для longtask и отправляет событие, если длительность задачи превышает заданный порог.

Событие отправляется только если:

  • длительность задачи больше или равна порогу;
  • у первой attribution есть: containerSrccontainerIdcontainerName

Это помогает отсекать системные и малоинформативные задачи.

По умолчанию используется порог:

100 ms

Можно указать собственный порог:

const hawk = new HawkCatcher({ token: 'INTEGRATION_TOKEN', issues: { longTasks: { thresholdMs: 150, }, }, });

Минимальный кастомный порог — 50 ms.

События имеют заголовок вида:

Long Task — …

Дополнительные данные задачи попадают в payload события.

Поддержка зависит от браузера.

Если браузер не поддерживает longtask, наблюдатель не создаётся и ошибок из-за этого не будет.

Long Animation Frames позволяет отслеживать тяжёлые кадры рендеринга.

import HawkCatcher from '@hawk.so/browser'; const hawk = new HawkCatcher({ token: 'INTEGRATION_TOKEN', issues: { longAnimationFrames: true, }, });

Hawk создаёт PerformanceObserver для long-animation-frame и отправляет событие, если длительность кадра превышает заданный порог.

Событие отправляется только если:

  • длительность кадра больше или равна порогу;
  • в scripts есть скрипт с: sourceURLsourceFunctionNameinvoker

Это помогает отправлять только кадры с полезной диагностической информацией.

По умолчанию используется порог:

300 ms

Можно указать собственный порог:

const hawk = new HawkCatcher({ token: 'INTEGRATION_TOKEN', issues: { longAnimationFrames: { thresholdMs: 400, }, }, });

Минимальный кастомный порог — 50 ms.

События имеют заголовок вида:

Long Animation Frame

Иногда к заголовку добавляется суффикс с информацией о скрипте.

Поддержка зависит от браузера.

Если браузер не поддерживает long-animation-frame, наблюдатель не создаётся и ошибок из-за этого не будет.

Performance-события проходят через beforeSend, как и обычные события.

Их можно изменить или отфильтровать:

const hawk = new HawkCatcher({ token: 'INTEGRATION_TOKEN', beforeSend(event) { if (event.payload.title?.startsWith('Long Task')) { return false; } return event; }, });
☝️
Рекомендуется
настроить группировку по заголовкам:
Long Task —.+ Long Animation Frame.*