Profiling JavaScript* Code in Node.js*

This recipe provides configuration steps to rebuild Node.js* and enable Intel® VTune™ Amplifier performance analysis for your JavaScript code including mixed-mode call stacks containing JS frames and native frames (native code, for example, system libraries or native libraries called from the JavaScript code).

Ingredients

This section lists the hardware and software tools used for the performance analysis scenario.

  • Application: sample.js. The application is used as a demo and not available for download.

  • JavaScript environment: Node.js version 8.0.0 with Chrome* V8 version 5.8.283.41

  • Performance analysis tools: Intel VTune Amplifier 2018 - Advanced Hotspots analysis

    Note

    • For trial VTune Amplifier downloads and product support, visit https://software.intel.com/en-us/vtune.

    • All the Cookbook recipes are scalable and can be applied to VTune Amplifier 2018 and higher. Slight version-specific configuration changes are possible.

  • Operating system: Windows* 10

Enable VTune Amplifier Support in Node.js

  1. Download node.js sources (nightly build).

  2. Run the vcbuild.bat script from the root node-v8.0.0 folder:

    echo vcbuild.bat enable-vtune

    This script builds Node.js with the VTune Amplifier support to profile JavaScript code.

Note

  • On Linux* systems, avoid using the enable-vtune flag with the fully-static configure flag. This combination is not compatible and causes the Node.js environment to crash.

  • If you use Microsoft Visual Studio* 2015 IDE or higher, make sure to add #define _SILENCE_STDEXT_HASH_DEPRECATION_WARNINGS to the node-v8.0.0-win\deps\v8\src\third_party\vtune\vtune-jit.cc file:

    #include <string.h>
    
    #ifdef WIN32
    #define _SILENCE_STDEXT_HASH_DEPRECATION_WARNINGS
    #include <hash_map>
    using namespace std;
    #else
    ...

Profile JavaScript Code Running in Node.js

This recipe uses a sample JavaScript application:

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!"); 
To profile this application with the VTune Amplifier:
  1. Launch the VTune Amplifier:

    amplxe-gui.exe
  2. Click the New Project icon on the toolbar to create a new project.

  3. In the Analysis Target tab, specify node.exe in the Application field and sample.js in the Application parameters field:

  4. Switch to the Analysis Type tab and select the Advance Hotspots analysis type from the left pane and click Start to run the analysis.

    Note

    Advanced Hotspots analysis was integrated into the generic Hotspots analysis starting with VTune Amplifier 2019, and is available via the Hardware Event-based Sampling collection mode.

When the analysis is complete, the VTune Amplifier opens the result in the default Hotspots viewpoint. Use the Bottom-up window to explore how the samples are distributed through JavaScript functions. Double-click the function that took the most CPU time to execute to view the source code and identify the hottest code line:

For more complete information about compiler optimizations, see our Optimization Notice.
Select sticky button color: 
Orange (only for download buttons)