Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/35.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在nodejs上评测JavaScript代码-可能的方法_Javascript_Node.js_Profiling_V8_Callstack - Fatal编程技术网

在nodejs上评测JavaScript代码-可能的方法

在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.

我的目标是为nodejs开发一个java脚本分析器。 要求如下:

  • 应该能够获取调用堆栈
  • 获取时间戳信息
  • 获取迭代次数 我主要关心的是不应该修改源文件(.js文件)

    我已经看到了节点js上JavaScript代码的所有可用评测选项。我面临的问题是,它们中的大多数都需要手动将特定于分析的代码注入到我的源代码中。这里有一个例子

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

    profiler.startProfiling()

    //我的代码

    profiler.endProfling()

    因为大多数探查器都需要这种代码注入。 有人能给我推荐其他的评测方法吗(不需要修改源代码)

    目前,我正在使用NodeJS提供的v8功能来评测我的JavaScript代码。比如说

    节点——MyTestApp.js教授

    这个命令给我一个v8.log。这是一个

    下面是我的问题

  • v8是否有可能的解决方法,以便我可以添加时间戳信息、函数的迭代计数
  • 是否有任何其他分析工具(除了v8)可以满足我的要求

  • 非常感谢您的帮助

    您可以使用“英特尔VTune放大器XE”评测JS代码。简而言之,您将能够看到JS函数收集的样本,以及这些样本是如何通过JS源文件分发的。此外,VTune显示完整的调用堆栈信息,其中包括java(JIT)帧和本机帧(本机代码,例如,系统库或从JS代码调用的本机库)。 无需在代码中注入任何内容,但应重建Node.js(所需时间不到5分钟)

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

  • 下载node.js(夜间构建)。 请注意,上一版本是v0.10.25,但它包含不支持VTune的v8。v0.11.11升级到v8 v.3.22.24.19,支持VTune
  • 仅添加3行即可启用VTune支持

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

    包含“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',
    ],

  • 运行根节点-v0.11.11文件夹中的“vcbuild.bat nosign”
  • 现在,您可以使用VTune评测Node.JS中运行的JS代码了

    如何使用VTune评测Node.js

    可以下载VTune。首先尝试评估版本

    我的小应用程序-test.js

    函数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>