3.1.1 • Published 3 years ago

express-middleware-server-timing v3.1.1

Weekly downloads
46
License
MIT
Repository
github
Last release
3 years ago

express-middleware-server-timing

Automagic expressjs middleware performance monitoring.

There are many server-timing libraries out there for expressjs, but I couldn't find any that provided any out-of-the-box value.

Installation

npm install --save express-middleware-server-timing

Usage

const app = express()

// any time before `app.listen(...)`
require('express-middleware-server-timing')(app, [options])

The following table describes the properties of the options object.

PropertyDescriptionTypeDefault
namename of the server timing metricString'mw'
descriptiondescription of the server timing metricStringundefined
disabledset true if you want to disableBooleanfalse

A server-timing entry named <name> (with optional description of <description>) will be generated for every request that passes through express.

Manual instrumentation

serverTimingStart / serverTimingStop

To create a server-timing entry reporting the duration between two check points of the same response, try:

app.get(path, function (req, res, next) {
  res.serverTimingStart('foo', 'bar')

  // some time later, maybe in different middleware handler
  res.serverTimingStop('foo')

  // ...
})

A header like this will be written to the response:

Server-Timing: foo; dur=[time in ms]; desc="bar"

serverTimingSync

To create a server-timing entry reporting the duration it took to execute a syncronous method, try:

app.get(path, function (req, res, next) {
  const result = res.serverTimingSync(function() {
    // slow syncronous code here
  }, 'slowMethod1', 'sometimes this method is slow')

  // ...
})

A header like this will be written to the response:

Server-Timing: slowMethod1; dur=[time in ms]; desc="sometimes this method is slow"

Browser Collection

For browsers that suport server-timing (Chrome 65+, Opera 52+), the entries can be accessed like this:

['navigation', 'resource']
  .forEach(function(entryType) {
    performance.getEntriesByType(entryType).forEach(function({name: url, serverTiming}) {
      serverTiming.forEach(function({name, duration, description}) {
        console.info('expressjs middleware =',
          JSON.stringify({url, entryType, name, duration, description}, null, 2))
      })
    })
})

Conditionally disable (example: based on environment)

require('express-middleware-server-timing')(app, {
  disabled: process.env.NODE_ENV === 'production'
})

License

MIT

3.1.1

3 years ago

3.1.0

3 years ago

3.0.2

6 years ago

3.0.1

6 years ago

3.0.0

6 years ago

2.0.1

7 years ago

2.0.0

7 years ago

1.3.1

7 years ago

1.3.0

7 years ago

1.2.2

7 years ago

1.2.1

7 years ago

1.2.0

7 years ago

1.1.0

7 years ago

1.0.2

7 years ago

1.0.1

7 years ago