Rethinking of CPU profile (collected in Node.js or Chromium browsers) analysis.
Supported formats:
- V8 CPU profile (.cpuprofile)
- Chromium timeline / Trace Event format (.json)
STATUS: MVP / proof of concept
The project is at an early stage of development. Some things have yet to be added and polished. Feel free to create an issue if you found a bug or have an idea.
Head to the viewer on GitHub pages, open a file in one of supported formats or drop it on the page.
Install cpupro
globally using npm install -g cpupro
or use npx cpupro
:
cpupro
– open viewer without embedded data in default browsercpupro - <test.cpuprofile
orcat test.cpuprofile | cpupro -
– open viewer withtest.cpuprofile
data embeddedcpupro -h
– get usage information:
Usage:
cpupro [filepath] [options]
Options:
-f, --filename <filename> Specify a filename for a report; should ends with .htm or .html,
otherwise .html will be added
-h, --help Output usage information
-n, --no-open Prevent open a report in browser, the report will be written to file
-o, --output-dir <path> Specify an output path for a report (current working dir by default)
-v, --version Output version
Main cpupro
API is similar to console.profile()
/ console.profileEnd()
with an exception that the profileEnd()
method does nothing but return captured data with methods for saving data to a file and generating a report:
const profiler = require('cpupro');
profiler.profile('profileName');
// ... do something
const profile = profiler.profileEnd('profileName');
// write data to .cpuprofile file
profile.writeToFile('./path/to/demo.cpuprofile');
// or write a report (the viewer with embedded data) to file
profile.report.writeToFile('report.html');
// or just open the report in a browser
profile.report.open();
It is allowed to have several profiles being collected at once. It's possible to use a reference to profile record API instead of a profile name:
const profiler = require('cpupro');
const profile = profiler.profile();
// ... do something
// end profiling and open a report in a browser
profile.profileEnd().openReport();
Collect data, generate report and open it in a browser:
node --require cpupro path/to/script.js
Collect data, generate report and write into a file:
node --require cpupro/file path/to/script.js
# or
node --require cpupro/file/report path/to/script.js
Collect data and write it into .cpuprofile
file:
node --require cpupro/file/data path/to/script.js
MIT