JavaScript Performance Tester

Tests performance of different JavaScript Functions and prints the results to the console.

by briguy37

HTML

<input id="runTests" type="button" value="Run Tests"/>
<div id="testOutput"/>

JavaScript

var SECONDS_PER_TEST = 5;
var MS_PER_TEST = SECONDS_PER_TEST * 1000;
var MAX_TESTS_TO_RUN = 10000;

var a = [];

var initializeTest = function(){
    for(var i = 0; i < 10000; i++){
        a[i] = 0;
    }
};

var tests = {
    testStandard: function(){
        for (var i = 0; i < a.length; i++) {
            a[i] = 1;
        }
    },
    testMinimized: function(){
        for (var i = 0; i < a.length; i++) {
            a[i] = 1;
        }
    },
    cachedLength: function(){
        for (var i = 0, len = a.length; i < len; i++) {
            a[i] = 1;
        }
    }
};


var runTests = function(){
    var testTimes = {};
    for(var testName in tests){
        testTimes[testName] = runTest(testName, tests[testName]);
    }
    
    var minTestTime = 10000;
    for(var testName in testTimes){
        var testTime = testTimes[testName];        
        if(testTime < minTestTime){
            minTestTime = testTime;
        }
    }
    
    console.log('\nTest Results:');
    for(var testName in testTimes){
        var testTime = testTimes[testName];        
        if(testTime == minTestTime){
            console.log('  ' + testName + ':  Fastest!');
        } else {
            var percent = ((testTime / minTestTime) - 1) * 100
            var percentDisplay = parseFloat(percent).toFixed(2)
            console.log('  ' + testName + ':  ' + percentDisplay + '% slower');
        }
    }
};

var runTest = function(testName, testFunction){
    console.log('Testing ' + testName + '... (please wait ' + SECONDS_PER_TEST + ' seconds)');
    
    //Run once to see how many times we should run the test
    var startTime = getTime();
    var testRuns = totalTestTime = 0;
    while((getTime() - startTime) < MS_PER_TEST){
        initializeTest();
        
        var testTimeStart = getTime();
        testFunction();
        totalTestTime += getTime() - testTimeStart;
        
        testRuns++;
    }
    
    //Output and return the results
    var timePerTest =...