Мне нужно больше информации о Puppeteer page.metrics и queryObjects

1

Я использую Puppeteer, чтобы найти проблему утечки памяти. Я использую API-интерфейс puppeteer page.metrics(), но у меня возникли проблемы с пониманием каждого значения свойства. Все мои значения в метриках со временем увеличиваются. Ожидается ли это? Или это свидетельствует о серьезной утечке памяти?

Свойства, которые растут в стоимости при JSEventListeners, Nodes, LayoutCount, RecalcStyleCount, LayoutDuration, RecalcStyleDuration, ScriptDuration, TaskDuration, JSHeapUsedSize, JSHeapTotalSize приложения: JSEventListeners, Nodes, LayoutCount, RecalcStyleCount, LayoutDuration, RecalcStyleDuration, ScriptDuration, TaskDuration, JSHeapUsedSize, JSHeapTotalSize

Информация об этом материале очень скудна, и я продолжаю видеть, что люди ссылаются на page.queryObjects как еще один способ найти утечки памяти. Но я не могу найти никакой информации о том, как использовать этот API и что искать.

Теги:
memory-leaks
puppeteer

1 ответ

0
Лучший ответ

Согласно документации кукловода:

page.metrics()

  • возвращает: < Promise < Object > Объект, содержащий метрики как пары ключ/значение.
    • Timestamp < число > Временная метка, когда была выбрана метрика метрики.
    • Documents < число > Количество документов на странице.
    • Frames < число > Число кадров на странице.
    • JSEventListeners < число > Число событий на странице.
    • Nodes < число > Число узлов DOM на странице.
    • LayoutCount < число > Общее количество полного или частичного макета страницы.
    • RecalcStyleCount < число > Общее количество перерасчетов стиля страницы.
    • LayoutDuration < число > Комбинированные длительности всех макетов страниц.
    • RecalcStyleDuration < число > Комбинированная продолжительность всех пересчетов стиля страницы.
    • ScriptDuration < номер > Совместимая продолжительность исполнения JavaScript.
    • TaskDuration < номер > Комбинированная продолжительность всех задач, выполняемых браузером.
    • JSHeapUsedSize < number > Используемый размер кучи JavaScript.
    • JSHeapTotalSize < число > Общий размер кучи JavaScript.

ПРИМЕЧАНИЕ. Все временные метки находятся в монотонном времени: монотонно увеличивая время в секундах от произвольной точки в прошлом.

page.queryObjects(prototypeHandle)

  • prototypeHandle < JSHandle > дескриптор прототипа объекта.
  • возвращает: < Promise < JSHandle >> Promise, которая разрешает дескриптор массиву объектов с этим прототипом.

Метод выполняет итерацию кучи JavaScript и находит все объекты с данным прототипом.

// Create a Map object
await page.evaluate(() => window.map = new Map());
// Get a handle to the Map object prototype
const mapPrototype = await page.evaluateHandle(() => Map.prototype);
// Query all map instances into an array
const mapInstances = await page.queryObjects(mapPrototype);
// Count amount of map objects in heap
const count = await page.evaluate(maps => maps.length, mapInstances);
await mapInstances.dispose();
await mapPrototype.dispose();

Ярлык для page.mainFrame(). ExecuteContext(). QueryObjects (prototypeHandle).


Метод page.metrics() возвращает результат протокола Chrome DevTools Performance.getMetrics:

Performance.getMetrics

Получить текущие значения показателей времени выполнения.

ВОЗВРАТНЫЙ ОБЪЕКТ

  • metrics массив Metric
    • Текущие значения для метрик времени выполнения.

С другой стороны, протокол Chrome DevTools, который сопровождает метод page.queryObjects() это Runtime.queryObjects:

Runtime.queryObjects

ПАРАМЕТРЫ

  • prototypeObjectId RemoteObjectId
    • Идентификатор прототипа для возврата объектов.
  • Строка objectGroup (необязательно)
    • Символическое имя группы, которое можно использовать для вывода результатов.

ВОЗВРАТНЫЙ ОБЪЕКТ


Исходный код для page.matrics() и page.queryObjects() можно найти в GitHub.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню