Performance

Для подключения обратитесь в чат поддержки.

Перфоманс позволяет измерять время выполнения операций, расход памяти и другие важные для приложения показатели. Собранные метрики можно просматривать в Tracer и сравнивать, например, между версиями приложения.

С каждой собранной метрикой вы можете передавать дополнительные атрибуты (например, группа эксперимента или окружение и т. д.). Их можно передавать и при начале замера, и по его окончании.

Собранные данные можно найти в одноименном разделе Трейсера – «Перфоманс». Здесь отображена общая сводка по собранным вами метрикам с указанием их названия, типа и количества зафиксированных значений:

Подробнее о функциональности раздела читайте здесь. При отправке учитывайте серверный лимит приёма измерений.

Для работы с метриками вам понадобятся следующие модули Tracer JS SDK:

МодульОписание
initTracerPerformanceОтвечает за выполнение замеров важных для вас данных.
initTracerPerformanceMemoryОтвечает за выполнение замеров используемой памяти.
initTracerPerformanceUploaderОтвечает за загрузку данных о замерах в сервис.

Инициализация модуля

Для начала установите SDK – введите в терминале команду:

npm install @apptracer/sdk --save

Выберите пример для своей среды. В браузере модули можно подключить отдельно или через initTracerSdk. Отправитель Performance общий для ручных метрик, памяти и Web Vitals: подключите его один раз.

Параметр environment из конфигурации отправителя не добавляется к метрикам. Если нужно различать окружения, задайте атрибут через performanceAttributes или setPerformanceAttribute().

import { initTracerPerformance, initTracerPerformanceMemory, initTracerPerformanceUploader } from '@apptracer/sdk'; const tracerPerformance = initTracerPerformance(); const tracerPerformanceMemory = initTracerPerformanceMemory(); // подробнее о параметрах конфигурации см. ниже initTracerPerformanceUploader({ versionName: BUILD_VERSION_NAME, // строка с версией приложения из вашей сборки appToken: 'appToken из настроек в Трейсере' });

initTracerPerformance

Доступные опции:

МетодПараметрыОписание
addSample()sample: TracerSampleПозволяет вручную добавить семпл перфоманса с конкретным именем и значением.
addSampleTime()name: string, time: number, attributes?: ITracerSampleAttributes, unit?: PerformanceUnitTimeУпрощенный метод ручного добавления семпла перфоманса. По умолчанию в ms.
startTimer()name: string, attributes?: ITracerPerformanceAttributesСоздает и запускает таймер ITracerPerformanceTimer, который вы можете самостоятельно остановить в нужный момент. Переданные атрибуты будут относиться к замерам, зафиксированным с этого таймера.
time()name: string | string[], attributes?: ITracerPerformanceAttributesЗапускает таймер, который вы можете использовать для выполнения замеров операций. Действует по аналогии с console.time(). Переданные атрибуты будут относиться к замерам, зафиксированным с этого таймера.
timeEnd()name: string | string[], attributes?: ITracerPerformanceAttributesОстанавливает таймер, запущенный при помощи метода time(). Действует по аналогии с console.timeEnd(). Переданные атрибуты будут относиться к замерам, зафиксированным с этого таймера.
timeAbort()name: string | string[]Останавливает запущенный таймер, при этом данные не будут отправлены в сервис.

ITracerPerformanceAttributes – это список ваших атрибутов в формате [name: string]: string | number | boolean | undefined

TracerSample
ПараметрТипОбязательныйОписание
namestringДаНазвание метрики
valuenumberДаЗначение метрики
unitPerformanceUnitTime | PerformanceUnitData | PerformanceUnitValueДаЕдиница времени, объёма данных или значения.
precisionnumberДа, если указан unit = PerformanceUnitValue.FLOATТочность в измерении указанного юнита
attributesITracerPerformanceAttributesНетСписок атрибутов метрики

ITracerPerformanceTimer
ОпцияПараметрыОписание
endTimer()(attributes?: ITracerPerformanceAttributes)Завершает работу таймера и сохраняет данные замера.
abortTimer()()Завершает работу таймера, при этом данные замера не сохраняются.

Атрибуты и жизненный цикл

initTracerPerformance({ performanceAttributes: function () { return { page: location.pathname }; } }) задаёт функцию общих атрибутов. Она вызывается при добавлении семпла. Методы setPerformanceAttribute(name, value), setPerformanceAttributes(attributes) и removePerformanceAttribute(name) управляют постоянными атрибутами; последний принимает строку или массив строк.

Сначала SDK добавляет постоянные атрибуты, затем результат performanceAttributes, затем атрибуты самого замера. Если имя повторяется, используется последнее значение. Значение undefined удаляет атрибут. Перед отправкой строки, числа и логические значения преобразуются в строки.

startTimer() фиксирует переданные атрибуты при запуске; endTimer(attributes) может их дополнить или переопределить. Таймер завершается один раз. abortTimer() и пауза SDK отменяют его, в том числе при keepData: true: поздний endTimer() не добавит замер после возобновления.

Для time() можно передать составной ключ, например ['request', requestId]: весь массив идентифицирует таймер, а именем отправленной метрики станет первый элемент. В timeEnd() / timeAbort() передайте тот же ключ.

Единицы экспортируются из SDK: PerformanceUnitTime (от NANOSECOND до DAY), PerformanceUnitData (от BYTES до PETABYTES) и PerformanceUnitValue (INT, FLOAT, PERCENT). Для FLOAT обязательно задайте precision — число десятичных знаков. Отрицательные значения метрик не поддерживаются.

Пример использования

import { initTracerPerformance, initTracerPerformanceUploader, PerformanceUnitValue } from '@apptracer/sdk'; const tracerPerformance = initTracerPerformance(); initTracerPerformanceUploader({ versionName: BUILD_VERSION_NAME, // строка с версией приложения из вашей сборки appToken: 'appToken', // appToken из настроек проекта в Tracer }); tracerPerformance.addSample({ name: "SampleOperation", value: 1500000, unit: PerformanceUnitValue.INT, });

initTracerPerformanceMemory

Модуль измеряет память в браузере и доступен в том числе в Lite. Какие данные удастся получить, зависит от поддерживаемых браузером API.

В memoryUsageTimePoints передайте точки замера в формате { name, time }. Значение time задаётся в миллисекундах по шкале performance.now(), а при отсутствии этого API — от загрузки SDK. Это не задержка от вызова initTracerPerformanceMemory().

Общие атрибуты замеров задаются через memoryUsageAttributes. Поле getAttributes у отдельной точки сейчас не вызывается. Замер может выполниться в течение минуты после time; после этого он пропускается. Пауза отменяет уже начатые замеры, но после возобновления ещё могут выполниться точки, чьё минутное окно не истекло.

Параметры конфигурации

ПараметрТипОписание
memoryUsageTimePoints?ITracerMemoryUsageTimePoint[]Указывает на то, когда выполнять замеры памяти. При установке значения будет перезаписано значение по умолчанию. Чтобы отключить автоматические замеры, передайте в качестве параметра пустой массив.

Значения по умолчанию: initial, 5 min, 15 min, 60 min, 3 hr, 12 hr
memoryUsageAttributes?(name: string) => ITracerSampleAttributesВозвращает общие атрибуты замера по его имени.
enableMeasureUserAgentSpecificMemory?booleanПозволяет проводить более тщательные замеры памяти. Пожалуйста, ознакомьтесь с требованиями безопасности при использовании.

Доступные опции:

МетодПараметрыОписание
measureMemory()name: string, attributes?: ITracerSampleAttributesВыполняет запуск замера памяти. В список атрибутов также будут добавлены атрибуты из memoryUsageAttributes

Пример использования

import { initTracerPerformanceMemory, initTracerPerformanceUploader } from '@apptracer/sdk'; const tracerPerformanceMemory = initTracerPerformanceMemory(); initTracerPerformanceUploader({ versionName: BUILD_VERSION_NAME, // строка с версией приложения из вашей сборки appToken: 'appToken', // appToken из настроек проекта в Tracer }); tracerPerformanceMemory.measureMemory('SampleOperation');