我正在使用this article中的步骤使用v8探查器对Node.js程序进行概要分析,基本上是:
# run program with profiler, generating isolate-nnnnnnnnn-v8.log
node --prof myprogram.js
# process tick profiler file
node --prof-process isolate-nnnnnnnnn-v8.log > processed.txt
在processed.txt
中,有一节用于每种类型的代码(JS,C ++等)中的函数调用。对于JavaScript部分中列出的许多功能(例如someFunction
),我看到了*someFunction
和~someFunction
的条目:
[JavaScript]:
ticks total nonlib name
490 2.4% 2.5% LazyCompile: *someFunction pathToFile.js
80 0.4% 0.4% LazyCompile: ~someFunction pathToFile.js
有人可以告诉我函数名称前面的*
和~
(星号和波浪号)是什么意思吗?根据this page,{ {1}}可能意味着该功能已经过优化,但是我不确定,因为它是在不同的上下文中提到的。
答案 0 :(得分:3)
正确。 *
(星号)表示Turbofan已优化该功能。 ~
(波浪号)表示它的一个假设是不正确的,它不得不对函数进行优化,或者它没有时间进行优化,或者函数非常冷(很少运行),因此没有尝试
在运行节点时,还可以使用--trace-opt
和--trace-deopt
标志来查看背后的原因。