MiniProfiler for Node.js is back in business
May 28, 2016 • 2 minutes read • node.js, miniprofiler, performanceI’m truly addicted to MiniProfiler. Have being using it in my ASP.NET projects for a while and it really shines. I love to be able to see exactly what is making a particular request become slow or to find those nasty SELECT N+1 issues. I/O operations is the top reason for a slow application and MiniProfiler helps us find the bottleneck with ease.
Now that I’m working mostly with Node.js, I felt the need of using it as well. I found a port of it, which is hosted at GitHub under MiniProfiler/node, but it was untouched for the last 2 years.
I decided to give it a try and take it over.
I’m now actively working on the first releasable version of it. There is a still a lot of work to do, the API may change, but there was some progress so far.
- as an avid TDD practitioner, I’ve included unit tests that is currently covering 98% of the code;
- removed all the utility functions and replaced with underscore, which was already a dependency. Let’s not reinvent the wheel, right?
- setup of a linter so that we now have a standard coding style to follow;
- added support for all major Node.js web frameworks, which includes express, koa, hapi and raw http as well;
- updated ui to the latest version;
The next big step is to start writing providers to instrument the most used I/O libraries like pg, redis, mongoose and much more.
We will then be able to profile an entire Node.js app by doing a simple setup at startup and not changing anything else inside the app.
The real challenge is how to do that. I know it’s possible because there’s a hell out of good libraries doing instrumentation in JavaScript. But to me that’s a whole new world.
Aside from that, there’s also some other improvements and features yet to be done, like:
- storing client-side timing;
- storage should be asynchronous
- deliver some out of the box storage options like Redis and MongoDB;
- some real world example of apps using it;
- document everything, inside code and at README;
- include TypeScript typings;
- setup a docker composer so that developers won’t need to install anything locally to start making MiniProfiler awesome (Postgres, MongoDB, Redis, etc.);
I you like MiniProfiler as much as I do and you’re interested in helping, I would appreciate any feedback on what we’ve being doing so far and on the roadmap as well, just drop us an issue at GitHub or leave a comment. Pull requests are also always welcomed!