在nodejs上评测JavaScript代码-可能的方法
我的目标是为nodejs开发一个java脚本分析器。 要求如下:在nodejs上评测JavaScript代码-可能的方法,javascript,node.js,profiling,v8,callstack,Javascript,Node.js,Profiling,V8,Callstack,我的目标是为nodejs开发一个java脚本分析器。 要求如下: 应该能够获取调用堆栈 获取时间戳信息 获取迭代次数 我主要关心的是不应该修改源文件(.js文件) 我已经看到了节点js上JavaScript代码的所有可用评测选项。我面临的问题是,它们中的大多数都需要手动将特定于分析的代码注入到我的源代码中。这里有一个例子 var profiler=new profiler()//需要在我的.js文件中创建探查器 profiler.startProfiling() //我的代码 profiler.
非常感谢您的帮助您可以使用“英特尔VTune放大器XE”评测JS代码。简而言之,您将能够看到JS函数收集的样本,以及这些样本是如何通过JS源文件分发的。此外,VTune显示完整的调用堆栈信息,其中包括java(JIT)帧和本机帧(本机代码,例如,系统库或从JS代码调用的本机库)。 无需在代码中注入任何内容,但应重建Node.js(所需时间不到5分钟) 如何在Node.js中启用VTune支持
包含“v8 vtune.h”//位于\deps\v8\src\third\u party\vtune中
void Init(…){
…
V8::SetFlagsFromCommandLine(&V8_argc,const_cast(V8_argv),true);
vTune::InitializeVtuneForV8();
}
在\node.gyp文件中添加1行,以添加和构建VTune支持
“目标名称”:“节点”,
“类型”:“可执行文件”,
“依赖项”:[
“节点js2c#主机”,
'deps/v8/src/third_party/vtune/v8vtune.gyp:v8_vtune',
],
函数say(word){
console.log(“计算…”);
var-res=0;
对于(变量i=0;i<20000;i++){
对于(var j=0;j<20000;j++){
res=i*j/2;
}
}
console.log(“完成”);
console.log(word);
}
函数执行(someFunction,value){
函数(值);
}
执行(说“你好,来自Node.js!”)代码>
打开VTune(bin32\amplxe gui.exe)
创建新项目
将“node.exe”指定为要运行的应用程序,将“test.js”指定为应用程序的参数
单击“确定”,然后单击“新建分析”
选择“高级热点”作为分析类型,并选中“热点、堆栈和上下文切换”,以指定分析会话期间收集的信息级别。开始分析
当采集停止时,VTune将显示样本如何通过JS函数分布。您可以深入了解函数,了解样本是如何通过特定JS函数的源代码行分布的
#include "v8-vtune.h" // located in \deps\v8\src\third_party\vtune
void Init(...) {
…
V8::SetFlagsFromCommandLine(&v8_argc, const_cast(v8_argv), true);
vTune::InitializeVtuneForV8();
}
'target_name': 'node',
'type': 'executable',
'dependencies': [
'node_js2c#host',
'deps/v8/src/third_party/vtune/v8vtune.gyp:v8_vtune',
],
<pre> <code> function say(word) {
console.log("Calculating ...");
var res = 0;
for (var i = 0; i < 20000; i++) {
for (var j = 0; j < 20000; j++) {
res = i * j / 2;
}
}
console.log("Done.");
console.log(word);
}
function execute(someFunction, value) {
someFunction(value);
}
execute(say, "Hello from Node.js!"); </code> </pre>