繁体   English   中英

在nodejs上分析JavaScript代码-可能的方法

[英]Profiling JavaScript Code on nodejs - Possible Approaches

我的目标是为nodejs开发一个Java脚本探查器。 要求如下:

  1. 应该能够获取调用堆栈。
  2. 获取时间戳信息。
  3. 获取迭代次数。

我主要担心的是,我不应该修改源文件(.js文件)。

我已经在node js上看到了JavaScript代码的所有可用分析选项。 我面临的问题是,大多数问题都需要将配置文件特定的代码手动注入到我的源代码中。 这是一个例子

var profiler = new Profiler() //需要在我的.js文件中创建探查器

profiler.startProfiling()

//我的代码

profiler.endProfling()

由于大多数分析器都需要这种代码注入。 任何人都可以建议我其他任何分析方法(不需要修改源代码)。

目前,我正在使用节点js随附的v8功能来分析我的JavaScript代码。 例如

节点--prof MyTestApp.js

这个命令给我一个v8.log。 这是一个示例日志

所以这是我的疑问

  1. v8是否有可能的解决方法,以便我可以添加时间戳信息,函数的迭代次数
  2. 是否有其他任何配置工具(v8除外)都可以满足我的要求。

感谢帮助

您可以使用Intel VTune Amplifier XE来分析JS代码。 简而言之,您将能够看到JS函数收集的样本以及这些样本如何通过JS源文件分发。 此外,VTune显示完整的调用堆栈信息,包括Java(JIT)框架和本机框架(本机代码,例如,系统库或从JS代码调用的本机库)。 无需在代码中注入任何内容,但是您应该重建Node.js(花费不到5分钟)。

如何在Node.js中启用VTune支持

  1. 下载node.js 源代码 (每晚构建)。 请注意,最新版本是v0.10.25,但其中包含不支持VTune的v8。 v0.11.11已升级为具有VTune支持的v8 v.3.22.24.19。
  2. 通过仅添加3行来启用VTune支持

    在\\ src \\ node.cc中添加2行

     #include "v8-vtune.h" // located in \\deps\\v8\\src\\third_party\\vtune 

    \n\n

    void Init(...){…V8 :: SetFlagsFromCommandLine(&v8_argc,const_cast(v8_argv),true); vTune :: InitializeVtuneForV8() ; }

    在\\ node.gyp文件中添加1行以添加和构建VTune支持

      'target_name': 'node', 'type': 'executable', 'dependencies': [ 'node_js2c#host', 'deps/v8/src/third_party/vtune/v8vtune.gyp:v8_vtune', ], 

  3. 运行位于根节点-v0.11.11文件夹中的“ vcbuild.bat nosign”

现在,您准备使用VTune剖析在Node.js中运行的JS代码

如何使用VTune剖析Node.js

VTune可以在这里下载。 首先尝试评估版。

我的小应用-test.js

<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>
  1. 打开VTune(bin32 \\ amplxe-gui.exe)
  2. 创建一个新项目
  3. 指定“ node.exe”作为要运行的应用程序,并指定“ test.js”作为该应用程序的参数
  4. 单击确定,然后单击新建分析
  5. 选择“高级热点”作为分析类型,然后选中“热点,堆栈和上下文切换”以指定在分析会话期间收集的信息级别。 开始分析。
  6. 停止收集时,VTune将显示如何通过JS函数分配样本。 您可以深入研究函数,以了解特定JS函数的示例如何通过源代码行分布。

在此处输入图片说明

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM