Skip to content

Instantly share code, notes, and snippets.

@arturokunder
Last active August 19, 2016 20:45
Show Gist options
  • Save arturokunder/5feb9e40f84645c48aa7325178365a37 to your computer and use it in GitHub Desktop.
Save arturokunder/5feb9e40f84645c48aa7325178365a37 to your computer and use it in GitHub Desktop.
Javascript simple profiler
window.profiler = (function() {
var _events = {};
var _getEvents = function(name, domain) {
if(!name) {
return {};
}
if(!domain) {
domain = '';
}
if(!_events[domain]) {
_events[domain] = {};
}
if(!_events[domain][name]) {
_events[domain][name] = {
name: name,
domain: domain
};
}
return _events[domain][name];
};
var _setEvent = function(event, name, domain) {
if(!name) {
return {};
}
if(!domain) {
domain = '';
}
if(!_events[domain]) {
_events[domain] = {};
}
_events[domain][name] = event;
};
var _setTimestamp = function(name, domain, action) {
var a = _getEvents(name, domain);
a[action] = new Date();
_setEvent(a, name, domain);
};
var _start = function(name, domain) {
return _setTimestamp(name, domain, 'start');
};
var _stop = function(name, domain) {
return _setTimestamp(name, domain, 'stop');
};
var _getLog = function() {
var log = 'Name,Domain,Start,Stop,Duration (sec)\n';
for(var i in _events) {
for(var j in _events[i]) {
var item = _events[i][j];
var duration = item.start && item.stop ? (item.stop - item.start) / 1000 : 0;
var start = item.start ? item.start.getTime() : 0;
var stop = item.stop ? item.stop.getTime() : 0;
log += item.name + ',' + item.domain + ',' + start + ',' + stop + ',' + duration + '\n'
}
}
console.log(log);
};
return {
start: _start,
stop: _stop,
getLog: _getLog
};
})();
// MIN VERSION
window.profiler=function(){var t={},n=function(n,r){return n?(r||(r=""),t[r]||(t[r]={}),t[r][n]||(t[r][n]={name:n,domain:r}),t[r][n]):{}},r=function(n,r,o){return r?(o||(o=""),t[o]||(t[o]={}),void(t[o][r]=n)):{}},o=function(t,o,a){var e=n(t,o);e[a]=new Date,r(e,t,o)},a=function(t,n){return o(t,n,"start")},e=function(t,n){return o(t,n,"stop")},i=function(){var n="nombre,domain,start,stop,duration (sec)\n";for(var r in t)for(var o in t[r]){var a=t[r][o],e=a.start&&a.stop?(a.stop-a.start)/1e3:0,i=a.start?a.start.getTime():0,s=a.stop?a.stop.getTime():0;n+=a.name+","+a.domain+","+i+","+s+","+e+"\n"}console.log(n)};return{start:a,stop:e,getLog:i}}();
@arturokunder
Copy link
Author

Javascript simple profiler

Just add the minified code to your project and start profiling your code.

start and stop methods use as input a domain and a name for the event that is being registered i.e. start('get keys', 'services').

To get the times recorded, just run profiler.getLog(). This will console.log the output in CSV format to easily copy-paste in Excel or any other spreadsheat.

profiler is defined globally.

Quirks

If you call multiple times to start and stop function, it will record the timestamp of the last call.

Example

function someFunction() {
  profiler.start('name', 'domain');

  // Do stuff

  profiler.stop('name', 'domain')
}

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment