User:Mike Dillon/Scripts/bench.js
From Wikipedia, the free encyclopedia
Note: After saving, you have to bypass your browser's cache to see the changes. Firefox/Mozilla/Safari: hold down Shift while clicking Reload (or press Ctrl-Shift-R), Internet Explorer: press Ctrl-F5, Opera/Konqueror: press F5.
// Requires [[User:Mike Dillon/Scripts/easydom.js]] /* <pre><nowiki> */ function timeFunction (n, f) { var start = new Date(); // Execute n iterations of function f() for (var i = 0; i < n; i++) { f(); } return new Date().getTime() - start.getTime(); } function compareFunctions (n, funcs) { var fns = new Array(); var times = {}; // Go through the function hash and time each one for n iterations for (var fn in funcs) { var f = funcs[fn]; var t = timeFunction(n, f); fns[fns.length] = fn; times[fn] = t; } // Sort the function label list by execution time descending fns.sort(function (a, b) { return times[b] - times[a]; }); // Start the table that will be returned var table = easydom.table({ "class": "wikitable" }); // Build the header row var header = easydom.tr( easydom.th(), easydom.th("Count"), easydom.th("Time"), easydom.th("Rate") ); for (var i in fns) { header.appendChild(easydom.th(fns[i])); } table.appendChild(header); // Build the data rows for each function using fns for order for (var i in fns) { var fn = fns[i]; var ft = times[fn]; // Begin row with function label, count, time, and rate var row = easydom.tr( easydom.th(fn), easydom.td(n), easydom.td(times[fn] + " ms"), easydom.td(Math.round(n / (times[fn] / 1000)) + "/s") ); // Fill in comparisons with other functions for (var j in fns) { var fn2 = fns[j]; var cmp; if (fn == fn2) { cmp = "--"; } else { // Calculate percentage difference relative to column rate var ft2 = times[fn2]; var diff = (ft2 - ft) / ft2; cmp = (diff > 0 ? "+" : ""); cmp += Math.round(1000 * diff) / 10; cmp += "%"; } row.appendChild(easydom.td(cmp)); } // Add the data row to the table table.appendChild(row); } // Return the table's DOM node return table; } /* </nowiki></pre> */