Table of contents

Issues

issues отвечает только за события, которые Hawk JavaScript catcher собирает сам: глобальные ошибки в браузере и, при необходимости, performance-события — Web Vitals, Long Tasks и Long Animation Frames.

Ручная отправка событий не зависит от issues. То есть hawk.send(), hawk.captureError(), обработчики фреймворков и любой код, который вы вызываете сами, продолжат работать даже при:

issues: false

или

issues: { errors: false }

Эти настройки отключают только встроенный сбор событий, описанный ниже.

Через issues можно включать и выключать встроенный сбор событий:

  • глобальные ошибки браузера: window.error и window.unhandledrejection;
  • performance-события: плохие Web Vitals, длинные задачи и тяжёлые кадры;
  • общую фильтрацию через beforeSend, как и для обычных событий.
import HawkCatcher from '@hawk.so/javascript'; const hawk = new HawkCatcher({ token: 'INTEGRATION_TOKEN', issues: { errors: true, webVitals: true, longTasks: true, longAnimationFrames: true, }, });

Чтобы отключить весь встроенный сбор из issues, передайте:

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

В этом случае Hawk не будет сам подписываться на глобальные ошибки браузера и не запустит performance-детекторы.

Но ручная отправка по-прежнему будет работать:

hawk.send(...); hawk.captureError(...);

Если issues не передан или передан пустой объект:

issues: {}

то глобальные ошибки браузера включены по умолчанию.

А вот performance-детекторы по умолчанию выключены:

webVitals: false longTasks: false longAnimationFrames: false

Их нужно включать явно:

issues: { webVitals: true, longTasks: true, longAnimationFrames: true, }
Ключ Что делает
errors Включает или выключает обработчики window.error и window.unhandledrejection
webVitals Включает сбор Core Web Vitals через web-vitals
longTasks Включает сбор Long Tasks через Performance API
longAnimationFrames Включает сбор Long Animation Frames

Детектор считается включённым, если значение не undefined и не false.

Например, оба варианта включают детектор:

webVitals: true
webVitals: { reportPoorAbove: { LCP: 4500, }, }
issues: false

полностью отключает встроенный сбор из блока issues:

  • глобальные ошибки браузера не перехватываются;
  • Web Vitals не собираются;
  • Long Tasks не собираются;
  • Long Animation Frames не собираются.

При этом ручные вызовы остаются доступными:

hawk.send(...); hawk.captureError(...);

Глобальный перехват ошибок теперь настраивается через:

issues: { errors: false, }

Раньше для этого использовался параметр:

disableGlobalErrorsHandling: true

Сейчас он считается deprecated.

Пока старый параметр ещё поддерживается. Если указать:

disableGlobalErrorsHandling: true

то глобальные обработчики не будут подключены даже при:

issues: { errors: true, }

Для новых интеграций лучше использовать только issues.errors.

Было Стало
disableGlobalErrorsHandling: true issues: { errors: false }
не задавать настройку не задавать errors или указать errors: true

Важно:

errors: false

означает только «не подписываться на глобальные ошибки браузера».

Это не запрещает отправку ошибок вручную. Ошибки из try/catch, hawk.send(error), hawk.captureError(error) и других ручных вызовов будут отправляться как раньше.

Включить сбор Web Vitals можно так:

issues: { webVitals: true, }

или с собственными порогами:

issues: { webVitals: { reportPoorAbove: { CLS: 0.3, INP: 600, LCP: 4500, FCP: 3500, TTFB: 2200, }, }, }

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

Метрика Что означает Порог по умолчанию Зачем нужна
CLS Cumulative Layout Shift 0.35 Показывает визуальную стабильность страницы.
INP Interaction to Next Paint 700 мс Показывает скорость реакции страницы на действия пользователя.
LCP Largest Contentful Paint 5000 мс Показывает скорость загрузки основного контента.
FCP First Contentful Paint 4000 мс Показывает, когда пользователь впервые видит контент.
TTFB Time to First Byte 2500 мс Показывает скорость ответа сервера.

Событие отправляется только если значение метрики строго больше заданного порога.

Для каждой метрики событие отправляется не чаще одного раза за время жизни страницы.

В Hawk событие будет выглядеть примерно так:

Poor Web Vital: LCP (Largest Contentful Paint)

longTasks включает отслеживание длинных задач через Performance API.

☝️
важно
> Поддержка зависит от браузера. Если браузер не поддерживает `longtask`, наблюдатель не создаётся, и ошибки из-за этого не будет.
issues: { longTasks: true, }

Можно задать свой порог:

issues: { longTasks: { thresholdMs: 150, }, }

По умолчанию порог — 100 ms.

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

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

  • длительность задачи больше или равна порогу;
  • у первой attribution есть containerSrc, containerId или containerName.

Заголовок события:

Long Task — …

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

longAnimationFrames включает отслеживание тяжёлых кадров.

☝️
важно
> Поддержка зависит от браузера. Если браузер не поддерживает `long-animation-frame`, наблюдатель не создаётся, и ошибки из-за этого не будет.
issues: { longAnimationFrames: true, }

Можно задать свой порог:

issues: { longAnimationFrames: { thresholdMs: 400, }, }

По умолчанию порог — 300 ms.

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

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

  • длительность кадра больше или равна порогу;
  • в scripts есть скрипт с sourceURL, sourceFunctionName или invoker.

Заголовок события:

Long Animation Frame

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

Данные попадают в payload.addons в блок "Long Frame".

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

Все настройки задаются при создании catcher:

const hawk = new HawkCatcher({ token: 'INTEGRATION_TOKEN', issues: { errors: true, webVitals: true, }, });

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

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

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

Для таких событий удобно настроить группировку по заголовкам:

Long Task —.+ Long Animation Frame.* Poor Web Vital:.*