node package manager
Orgs are free. Discover, share, and reuse code in your team. Create a free org »

nanotiming

nanotiming stability

npm version build status downloads js-standard-style

Small timing library. Useful to integrate into libraries that have multiple methods. Only works in the browser, does nothing in Node.

Usage

var nanotiming = require('nanotiming')
 
var timing = nanotiming('my-loop') // Start profiling
 
var i = 1000
while (--i) console.log(i)
 
// Stop profiling
timing(function (err) {
  if (err) return
 
  // Inspect timings when we have spare time available
  window.requestIdleCallback(function () {
    var timings = window.performance.getEntries()
    var timing = timings[timings.length - 1]
    console.log(timing.name, timing.duration) // log the last entry
    performance.clearMeasures(timing.name)    // be a good citizen and free after use
  })
})

Timing names

Timings inside the view are appended with a unique UUID so they can be cleared individually. While there's no strict format for timing formats, we recommend using a format along these lines:

choo.render [12356778]
choo.route('/') [13355671]
choo.emit('log:debug') [13355675]

Disabling timings

Performance timers are still a somewhat experimental technology. While they're a great idea conceptually, there might be bugs. To disable timings complete, set:

window.localStorage.DISABLE_NANOTIMING = true

API

endTiming = nanotiming(name)

Start a new timing.

endTiming.uuid

The unique ID created for the timing.

endTiming([cb(err, name)])

Close the timing. Measuring the timing is done inside a requestIdleCallback() tick, so it might not be available immediately. If a callback is passed it will be called with an error (if measuring wasn't successful) and the timing's name.

License

MIT