Get the function timing log
$ npm install supertimingoptions.startIndexThe start index for server timing, default is 'A'options.precisionThe precision for time,msorns, default is 'ms'
const Timing = require('supertiming');
const timing = new Timing({
startIndex: '0',
precision: 'ns',
})Set the starting point of timing function, if there is any function is not finished, it will be the child of those functions
nameThe function name of timing
const Timing = require('supertiming');
const delay = ms => new Promise(resolve => setTimeout(resolve, ms));
const timing = new Timing();
const endGetUser = timing.start('GetUserInfo');
delay(10).then(() => {
timing.start('FindOneById:User');
}).then(() => {
endGetUser();
});Set the ending point of timing function
nameThe function name to timing, if the name is*ornull, end all doing timing
const Timing = require('supertiming');
const delay = ms => new Promise(resolve => setTimeout(resolve, ms));
const timing = new Timing();
timing.start('GetUserInfo');
delay(10).then(() => {
timing.start('FindOneById:User');
return delay(40);
}).then(() => {
timing.end();
});Add metric to timing
-
nameThe function name of timing -
useCost time of function
const Timing = require('supertiming');
const timing = new Timing();
timing.addMetric('Get-Session', 35);
const data = timing.toJSON();
// [ { name: 'Get-Session', use: 35 } ]
console.info(data);Remove the function from timing
nameThe function name of timing
const Timing = require('supertiming');
const delay = ms => new Promise(resolve => setTimeout(resolve, ms));
const timing = new Timing();
timing.start('GetUserInfo');
delay(10).then(() => {
timing.start('FindOneById:User');
return delay(40);
}).then(() => {
timing.remove('FindOneById:User');
// only timing `GetUserInfo`
timing.end();
});Change the function name of timing
-
nameThe original function name -
newNameThe new function name
const Timing = require('supertiming');
const delay = ms => new Promise(resolve => setTimeout(resolve, ms));
const timing = new Timing();
timing.start('GetUserInfo');
delay(10).then(() => {
timing.start('FindOneById:User');
return delay(40);
}).then(() => {
timing.rename('FindOneById:User', 'FindOneByIdNew:User');
timing.end();
});Get tming json format
ignoreChildrenignore the children, default is false
const Timing = require('supertiming');
const delay = ms => new Promise(resolve => setTimeout(resolve, ms));
const timing = new Timing();
timing.start('/users/me');
const endGetUser = timing.start('getUser');
timing.start('mongodb:get')
delay(30)
.then(() => {
timing.end('mongodb:get');
timing.start('validate:user');
return delay(50);
})
.then(() => {
timing.end('validate:user');
return delay(10);
})
.then(() => {
endGetUser();
timing.end('/users/me');
const data = timing.toJSON();
//[ { name: '/users/me',
// startedAt: 1486736323078,
// use: 104,
// children: [ 'getUser', 'mongodb:get', 'validate:user' ] },
// { name: 'getUser',
// startedAt: 1486736323078,
// use: 104,
// children: [ 'mongodb:get', 'validate:user' ] },
// { name: 'mongodb:get', startedAt: 1486736323078, use: 37 },
// { name: 'validate:user', startedAt: 1486736323116, use: 53 } ]
console.info(data);
}).catch(console.error);ignoreChildrenignore the children, default is false
const Timing = require('supertiming');
const delay = ms => new Promise(resolve => setTimeout(resolve, ms));
const timing = new Timing({
precision: 'ns',
});
timing.start('/users/me');
const endGetUser = timing.start('getUser');
timing.start('mongodb:get')
delay(30)
.then(() => {
timing.end('mongodb:get');
timing.start('validate:user');
return delay(50);
})
.then(() => {
timing.end('validate:user');
return delay(10);
})
.then(() => {
endGetUser();
timing.end('/users/me');
const data = timing.toString();
// /users/me[getUser,mongodb:get,validate:user][99915666ns] getUser[mongodb:get,validate:user][99834611ns] mongodb:get[32904455ns] validate:user[53700273ns]
console.info(data);
}).catch(console.error);Get server timing for http response
ignoreChildrenignore the children, default is false
const Timing = require('supertiming');
const delay = ms => new Promise(resolve => setTimeout(resolve, ms));
const timing = new Timing();
timing.start('/users/me');
timing.start('getUser');
timing.start('mongodb:get')
delay(30)
.then(() => {
timing.end('mongodb:get');
timing.start('validate:user');
return delay(50);
})
.then(() => {
timing.end('validate:user');
return delay(10);
})
.then(() => {
timing.end('getUser');
timing.end('/users/me');
const data = timing.toServerTiming();
// A=0.097;"/users/me(1 2 3)",B=0.096;"getUser(2 3)",C=0.03;"mongodb:get",D=0.054;"validate:user"
console.info(data);
}).catch(console.error);Set the server timing start index, default is A
chThe start index char
const Timing = require('supertiming');
const delay = ms => new Promise(resolve => setTimeout(resolve, ms));
const timing = new Timing();
timing.setStartIndex('a');
timing.start('/users/me');
timing.start('getUser');
timing.start('mongodb:get')
delay(30)
.then(() => {
timing.end('mongodb:get');
timing.start('validate:user');
return delay(50);
})
.then(() => {
timing.end('validate:user');
return delay(10);
})
.then(() => {
timing.end('getUser');
timing.end('/users/me');
const data = timing.toServerTiming();
// a=0.097;"/users/me(1 2 3)",b=0.096;"getUser(2 3)",c=0.03;"mongodb:get",d=0.054;"validate:user"
console.info(data);
}).catch(console.error);Set Server-Timing useing Koa2
const Timing = require('supertiming');
const Koa = require('koa');
const app = new Koa();
function getUser() {
...
}
function mongodbGet() {
...
}
function validateUser() {
...
}
app.use((ctx, next) => {
const timing = new Timing();
timing.start('Total');
ctx.state.timing = timing;
return next().then(() => {
tming.end('*');
ctx.set('Server-Timing', timing.toServerTiming());
});
});
app.use((ctx) => {
if (ctx.url === '/user/me') {
const timing = ctx.state.timing;
timing.start('/user/me');
timing.start('getUser');
return getUser()
.then(() => {
timing.start('mongodb:get');
return mongodbGet();
})
.then(() => {
timing.end('mongodb:get');
timing.start('validate:user');
return validateUser();
})
.then(() => {
timing.end('validate:user');
ctx.body = {
account: 'vicanso',
};
timing.end('/user/me');
});
}
});
app.listen();MIT
