Reputation: 1
My aim is to develop a java script profiler for nodejs . The requirements are as under :
My chief concern is that i should not modify the source file ( .js file ) .
I have seen all the available profiling options for JavaScript code on node js . The problem i face is that most of them require manual injection of the profiling specific code into my source code. Here is an example
var profiler = new Profiler() // Need to create profiler in my .js file
profiler.startProfiling()
// My Code
profiler.endProfling()
Since most profilers require this kind of code injection. Can anyone suggest me any other profiling alternative (which will not need source code modification).
Currently i am using v8 functionality provided with node js to profile my JavaScript Code. For example
node --prof MyTestApp.js
This command gives me a v8.log . Here is a sample log
So here are my queries
Help is appreciated
Upvotes: 0
Views: 2234
Reputation: 151
You can use Intel VTune Amplifier XE to profile JS code. In short, you will be able to see the samples collected by your JS functions and how these samples distributed through JS source files. In addition, VTune displays complete call stack information which includes java (JIT) frames and native frames (native code, for example, system library or native library called from JS code). No need to inject anything in your code but you should rebuild Node.js (it takes less than 5 mins).
How to enable VTune support in Node.js
Enable VTune support by adding just 3 lines
Add 2 lines in \src\node.cc
#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();
}
Add 1 line in \node.gyp file to add and build VTune support
'target_name': 'node',
'type': 'executable',
'dependencies': [
'node_js2c#host',
'deps/v8/src/third_party/vtune/v8vtune.gyp:v8_vtune',
],
Now you ready to profile JS code running in Node.js using VTune
How to profile Node.js using VTune
VTune can be downloaded here . Try evaluation version first.
My small app - 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>
Upvotes: 1