Javascript Profiler в Chrome 79 для Windows: Что включает в себя время? - PullRequest
0 голосов
/ 06 января 2020

Запуск в браузере Javascript в Chrome 79 для Windows :: Из аналогичных потоков звучит так, как будто время в себе включает только время для запуска встроенного кода в определенной функции и исключает любое время потратил на выполнение подфункций.

Но на практике я заметил, что некоторые функции в моем приложении, которые выполняют много вложенных вызовов, по-видимому, имеют чрезмерное количество времени по сравнению с другими функциями аналогичного размера с небольшим или отсутствующим подчиненным элементом. -calls. (т.е. я сравниваю две функции с относительно похожими операциями, а также количество операций). Время самоподдержки этих двух функций может варьироваться в 10 раз.

Мне интересно, включает ли время самоподготовки время для подготовки к этим вызовам и т. Д. c?

Возможно, это возможно что некоторое из этого более высокого собственного времени функции с дополнительными вызовами связано с более поздней оптимизацией V8, и поэтому во время выборки профилировщика я сравниваю собственное время оптимизированной функции с еще не выполненным оптимизированная функция, которая может работать в 100 раз медленнее до оптимизации. Может это виновник?

1 Ответ

1 голос
/ 07 января 2020

Собственное время включает только время для запуска встроенного кода в определенной функции и исключает любое время, затрачиваемое на выполнение подфункций

Да, «самостоятельное время» - это число образцов тиков, которые произошли в данной функции.

Мне интересно, включает ли время для подготовки к этим вызовам время, и т. Д. c?

«время для подготовки вызовов» не измеряется отдельно.

Я заметил, что некоторые функции в моем приложении, которые выполняют много вложенных вызовов, по-видимому, имеют чрезмерное количество собственного времени

Я думаю, что вы наблюдаете это вызвано встраиванием. Когда функция оптимизируется, и компилятор решает встроить в нее одну или несколько вызываемых функций, то впоследствии профилировщик не сможет различить guish откуда были взяты первоначально инструкции (одна из причин, по которым встраивание может быть полезным потому что это может позволить устранить избыточность, которая естественным образом стирает строки, к которым исходная функция принадлежит данной инструкции). Имеет ли это смысл?

Если вы хотите исключить эффекты встраивания при профилировании, вы можете отключить встраивание. В Node / V8 вы можете запустить с --noturbo-inlining. (FWIW, в C / C ++ это также верно, когда GCC / Clang понимает -fno-inline.) Обратите внимание, что отключение встраивания изменяет характеристики производительности вашего приложения, поэтому может привести к вводящим в заблуждение результатам (в частности: это может быть так, что без на вкладке вы увидите проблему с производительностью, которая просто исчезает при включении наложения); но это также может быть полезно для определения того, что медленно.

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