2

Я использую вкладку «Профили» инструментов Dev в Chrome. В профиле я вижу запись для функции resizeDocument, называемую 6+ раз, со значениями 113ms, 17ms, 45ms и т. Д. И т. Д. Номер той же строки, тот же файл, то же самое.Инструменты разработчика Chrome Инструменты Профилировщик, показывающий разные вызовы методов vs console.log

Когда я выхожу из консоли внутри функции resizeDocument, я получаю только одну запись. Что происходит?

enter image description here

enter image description here

enter image description here

enter image description here

+0

Я замечаю, что существует «совокупное общее время», которое одинаково в каждом случае. Возможно, существует какая-то внутренняя странность V8, и трассировка стека начинает падать? – sennett

ответ

1

Причиной этого является характер CPU профилировщика в хроме. Это профилировщик выборки. Таким образом, он собирает стеки вызовов (образцы) запущенной программы и использует их для восстановления столбцов в виде диаграммы.

Например, если профилировщик собрал 1000 образцов с одним кадром вызова для функции «foo» в каждом образце, вы увидите 1-длинную полосу с именем «foo» в ней.

Может случиться так, что профилировщик не сможет собрать следующую трассировку стека. Например, это происходит, когда профайлер пытается собрать кадры вызовов из стека в то время, когда функция «foo» называется функцией «бар» прямо перед образцом. В этот момент, сразу после команды вызова, функция «бар» создает кадр вызова для «foo» в стеке. Таким образом, кадры вызова в стеке в настоящий момент находятся в недействительном состоянии. Профилер обнаруживает это и отбрасывает образец. В результате разрыв происходит в последовательности следов стека.

В этом случае будут построены два разных столбца для «foo».

Также существует несколько других причин, когда профилировщик не может собирать стек вызовов.

+0

Спасибо за это. Таким образом, нет способа (без console.log) проверить, что два бара в профилировщике фактически не являются двумя вызовами функций? – sennett

+0

yep. Инструментальный профилировщик, который имеет такие гарантии, прикручивает производительность приложения гораздо больше, чем профайлер. Поэтому никто не нуждается в данных, которые не отражают реальной ситуации. – loislo

 Смежные вопросы

  • Нет связанных вопросов^_^