NodeJS perfil muito fácil usando instrumentação

Na verdade, é muito fácil em nodeJS fazer o perfil de seus aplicativos sem nem mesmo tocar em seu código normal.

Isso é chamado de instrumentação.

O que você basicamente faz é usar um pouco da mágica do Javascript para envolver os métodos que realmente executam a lógica e medir o tempo de execução entre a chamada e o retorno.

Este é um exemplo muito fácil para uma instrumentação mongoDB que codifiquei:

collection = require("mongodb/lib/mongodb/collection").Collection

oldFind
= collection.prototype.find

collection
.prototype.find = ->
tagName
= "#{@db.databaseName}/#{@collectionName}/find"
findParameters
= arguments[1]
start
= +new Date()

cursor
= oldFind.apply @, arguments

selectorParameters
= cursor.selector

oldArray
= cursor.toArray

cursor
.toArray = (cb) ->

instrumentedCb
= =>
console
.log tagName, +new Date() - start
if findParameters
console
.log findParameters
if selectorParameters
console
.log selectorParameters

cb
.apply cursor, arguments

oldArray
.apply cursor, [instrumentedCb]

cursor

Aqui está a essência sempre mais atualizada: https://gist.github.com/sebastianhoitz/4964446

Alguém está interessado em fragmentos de coleção como esses em uma biblioteca de código aberto útil que você pode usar para enviar métricas para statsD, ou seja?