diff --git a/SUMMARY.MD b/SUMMARY.MD index e9d1d08..090dae2 100644 --- a/SUMMARY.MD +++ b/SUMMARY.MD @@ -118,6 +118,7 @@ - [1. Cache your routes using varnish](/performance/backend/cache-routes-using-varnish.mo.md) - [2. Serve images as static files](/performance/backend/serve-images-as-static-files.mo) - [3. Minimize your number of SQL queries](/performance/backend/minimize-number-sql-queries.mo.md) + - [4. Log queries durations with Knex](/performance/backend/log-queries-durations-with-knex.mo.md) - Front - 1. Pure components **-> [To do]** - Have you a mean of keeping the performance under control? diff --git a/performance/backend/log-queries-durations-with-knex.mo.md b/performance/backend/log-queries-durations-with-knex.mo.md new file mode 100644 index 0000000..733d9a5 --- /dev/null +++ b/performance/backend/log-queries-durations-with-knex.mo.md @@ -0,0 +1,60 @@ +# [MO] How to log your queries durations with Knex (~10) + +## Owner: [Guillaume Renouvin](https://github.com/GuillaumeRenouvin) +## Creation date: August, 1st 2018 +## Update date: August, 1st 2018 + +## Context +- You want to log your database requests durations using Knex query builder + +## Prerequisites +- Have Knex installed + +## Steps + +### Log your queries informations (~5min) +- After your Knex instantiation add listeners on each query, query response and query errors +```javascript +db.on('query', query => { + console.log(query.sql); +}) + .on('query-response', (response, query) => { + console.log(query.sql); + }) + .on('query-error', err => { + console.log(err); + }); +``` +> Check: Launch your server, call an API route and you should see your queries on the logs + +### Log query duration (~5min) + +```javascript +import now from 'performance-now'; + +const durations = {}; + +knex + .on('query', query => { + durations[query.__knexQueryUid] = { + query, + startTime: now(), + }; + }) + .on('query-response', (response, query) => { + durations[query.__knexQueryUid].endTime = now(); + + console.log(query.sql, ',', `[${query.bindings ? query.bindings.join(',') : ''}]`); + console.log( + `Time: ${( + durations[query.__knexQueryUid].endTime - durations[query.__knexQueryUid].startTime + ).toFixed(3)} ms\n` + ); + delete durations[uid]; + }); + + ``` +> Check: Launch your server, call an API route and you should see your queries durations on the logs + +### Sources +- [Timing Your Queries in Knex.js for Node.js](https://spin.atomicobject.com/2017/03/27/timing-queries-knexjs-nodejs/)