Record PerformanceEntry
objects from Node.js and the Web in the Trace Event Format, so that it can be visualized on https://ui.perfetto.dev like this!
The code for this example is available here.
The code for this example is available here.
Check out the blog !
To install via NPM, run:
npm i perftrace
Alternatively, you can use it in vanilla JS, without any bundler, by using a CDN or static hosting. For example, using ES Modules, you can import the library with:
<script type="module">
import { TraceEvents } from "https://cdn.jsdelivr.net/npm/perftrace/index.mjs";
</script>
const { TraceEvents, trackRequires } = require('perftrace');
const { writeFileSync } = require('fs');
const traceEvents = new TraceEvents();
// Writes the performance traces in the "events.json" file during process exit.
process.on("beforeExit", () => {
const events = traceEvents.getEvents();
traceEvents.destroy();
writeFileSync("events.json", JSON.stringify(events));
});
// Enables tracking require() calls.
trackRequires(true, { trackSource: true });
// The assert module takes milliseconds to load, so it would be distinctly
// visible in the performance trace.
const assert = require('assert');
const { performance } = require("node:perf_hooks");
// This is tracing an async setTimeout event which is interlaced with
// repeating setInterval events.
performance.mark("Timeout mark"); // marks the beginning of the timeout trace
setTimeout(() => {
performance.measure("Timeout", "Timeout mark"); // marks the ending of the timeout trace
}, 20);
let id = 0;
performance.mark(`Interval mark ${id}`); // marks the beginning of the first interval trace
setInterval(function () {
performance.measure(`Interval ${id}`, `Interval mark ${id}`); // marks the ending of the current interval trace
++id;
// The intervals should go up to 3 counts only.
if (id === 3) {
this.close();
}
performance.mark(`Interval mark ${id}`); // marks the beginning of the next interval trace
}, 5);
After running this script with node filename.js
, open the generated events.json
file on https://ui.perfetto.dev.
Check out the API documentation and the code examples for details.
This project is available under the MIT license. See LICENSE for the full license text.