PerformanceObserver для здоровья веб-приложения
Наблюдайте собственные записи производительности, агрегируйте полезные сигналы и ограничивайте нагрузку без профилирования пользователей.
BotBrowser Team
Нужна структурированная документация по теме Платформа?
Эта статья относится к редакционной библиотеке. Для пошаговой настройки, справки и постоянных обновлений переходите сразу в соответствующий раздел docs.
PerformanceObserver позволяет приложению получать записи производительности по мере их появления в браузере. Он отвечает на ограниченный вопрос: например, успевает ли маршрут показать основной контент в пределах цели сервиса. Это не полный диагноз, не тест устройства и не разрешение хранить все значения времени. Здесь описаны границы наблюдения, выбор записей, агрегация и накладные расходы.
Роль PerformanceObserver
Создайте наблюдатель с callback и запросите только нужные типы. observe({ type: 'navigation', buffered: true }) может включить уже созданную запись навигации; paint работает только там, где тип поддержан. Проверяйте каждый тип и считайте пустой список допустимым результатом, не подставляя выдуманное значение.
const allowed = new Set(['navigation', 'paint', 'largest-contentful-paint']);
const samples = [];
const observer = new PerformanceObserver(list => {
for (const entry of list.getEntries()) {
if (allowed.has(entry.entryType))
samples.push({ type: entry.entryType, startTime: entry.startTime, duration: entry.duration });
}
});
try {
observer.observe({ type: 'paint', buffered: true });
} catch {
/* страница остаётся рабочей */
}
observer.disconnect();
W3C Performance Timeline задаёт общую модель, а MDN PerformanceObserver описывает API. Источники не обещают каждый тип в каждом браузере и не устанавливают причину задержки по одной записи.
Выбор полезных записей
Начните с видимого результата. Навигация описывает этапы документа, paint означает визуальный результат, ресурсные записи показывают класс зависимости. Длинная задача может показать давление на главный поток, но не доказывает его источник. Свяжите один тип с одним решением и сохраните сопоставимый контекст.
| Ситуация | Запись | Действие |
|---|---|---|
| Тип поддержан и есть записи | разрешённый тип, агрегат, версия | сравнить с утверждённой целью |
| Записей нет | entry-empty и контекст | продолжить без искусственной длительности |
| Тип не поддержан | entry-unsupported | применить альтернативу |
| Достигнут предел | sample-cap-reached | остановить сбор и агрегировать |
| Завершение или отмена | observer-disconnected | игнорировать поздние callback и очистить |
Запись браузера не является измерением сервера. BotBrowser может запускать разрешённые сценарии и сравнивать видимые результаты, но не гарантирует одинаковые типы, планирование или производственное здоровье во всех средах.
Агрегация и минимум данных
Сохраняйте тип, ограниченную длительность или корзину, id fixture, версию и результат. Не храните URL, запросы, текст, аккаунты и долгую историю пользователя. Маскируйте имена, используйте процентили и счётчики, а диагностический id удаляйте после согласованного окна. Ограничьте количество записей и время наблюдения.
Кэш, видимость, восстановленные страницы, планирование и версия браузера меняют результаты. Помечайте контекст. Отсутствие данных не требует собирать другой идентификатор и не позволяет выводить личность или класс устройства.
Проверка накладных расходов
Сравните один fixture с наблюдателем и без него. Проверьте завершение действия, число callback, память и агрегат. Повторите для отмены, перехода, заполненной очереди и неподдержанного типа. Страница должна оставаться рабочей, а очистка должна быть ограниченной. Отделяйте корректность от скорости и не публикуйте универсальные пороги.
Для выпуска зафиксируйте список типов, fixture, браузер, агрегацию, хранение и rollback. Сохраняйте отрицательные результаты и после изменения сначала запускайте минимальный fixture.
Для соседнего контекста используйте руководство по оптимизации производительности и руководство по приватности таймингов.
Определите маршрут и действие до сбора. Сохраняйте fixture, версию браузера и контекст; отсутствие записи считайте допустимым откатом. Ограничьте объём до callback, отключайте наблюдатель, игнорируйте старые callback и разделяйте холодную и тёплую навигацию. Сохраняйте агрегаты, маскируйте URL, удаляйте диагностический id и проверяйте отмену, уход, фокус, перевод и неподдержанные типы.
Наблюдение остаётся ограниченным и связано с видимым действием.
Наблюдение остаётся ограниченным и связано с видимым действием.
Наблюдение остаётся ограниченным и связано с видимым действием.
Наблюдение остаётся ограниченным и связано с видимым действием.
Наблюдение остаётся ограниченным и связано с видимым действием.
Наблюдение остаётся ограниченным и связано с видимым действием.
Наблюдение остаётся ограниченным и связано с видимым действием.
Наблюдение остаётся ограниченным и связано с видимым действием.
Наблюдение остаётся ограниченным и связано с видимым действием.
Наблюдение остаётся ограниченным и связано с видимым действием.
Наблюдение остаётся ограниченным и связано с видимым действием.
Наблюдение остаётся ограниченным и связано с видимым действием.
Наблюдение остаётся ограниченным и связано с видимым действием.
Наблюдение остаётся ограниченным и связано с видимым действием.
Наблюдение остаётся ограниченным и связано с видимым действием.
Наблюдение остаётся ограниченным и связано с видимым действием.
Наблюдение остаётся ограниченным и связано с видимым действием.
Наблюдение остаётся ограниченным и связано с видимым действием.
Наблюдение остаётся ограниченным и связано с видимым действием.
Наблюдение остаётся ограниченным и связано с видимым действием.
Наблюдение остаётся ограниченным и связано с видимым действием.
Наблюдение остаётся ограниченным и связано с видимым действием.
Наблюдение остаётся ограниченным и связано с видимым действием.
Наблюдение остаётся ограниченным и связано с видимым действием.
Наблюдение остаётся ограниченным и связано с видимым действием.
Наблюдение остаётся ограниченным и связано с видимым действием.
Наблюдение остаётся ограниченным и связано с видимым действием.
Наблюдение остаётся ограниченным и связано с видимым действием.
Наблюдение остаётся ограниченным и связано с видимым действием.
Наблюдение остаётся ограниченным и связано с видимым действием.
Наблюдение остаётся ограниченным и связано с видимым действием.
Наблюдение остаётся ограниченным и связано с видимым действием.
Наблюдение остаётся ограниченным и связано с видимым действием.
Наблюдение остаётся ограниченным и связано с видимым действием.
Наблюдение остаётся ограниченным и связано с видимым действием.
Наблюдение остаётся ограниченным и связано с видимым действием.
Наблюдение остаётся ограниченным и связано с видимым действием.
Наблюдение остаётся ограниченным и связано с видимым действием.
Наблюдение остаётся ограниченным и связано с видимым действием.
Наблюдение остаётся ограниченным и связано с видимым действием.
Наблюдение остаётся ограниченным и связано с видимым действием.
Наблюдение остаётся ограниченным и связано с видимым действием.
Публичные источники
Похожие статьи
Переведите BotBrowser из исследований в продакшн
Используйте эти руководства, чтобы понять модель, а затем перейти к кроссплатформенной валидации, изолированным контекстам и масштабируемому браузерному развертыванию.