Loop Unrolling in JavaScript

by Shobhit Sharma

HTML

<html>
    <body>
    </body>
</html>

JavaScript

/*jslint browser: true, maxerr: 50, indent: 4 */
/*global $*/

(function () {
    "use strict";
    
    var data,
        profile,
        normal,
        lengthCheckedInForLoop,
        unrolled,
        veryUnrolled,
        print,
        
        // You might want to change these
        iterations = 10000,
        dataSize = 10000;

    print = function (text) {
        $("body").append(text);
    };

    data = (function () {

        var arr = [],
            i;

        for (i = 0; i < dataSize; i += 1) {
            arr.push(Math.random());
        }
        
        return arr;
    }());

    profile = function (fn) {

        var time = function () {
            return (new Date()).getTime();
        },
            start,
            duration,
            i;

        start = time();
        
        for (i = 0; i < iterations; i += 1) {
            fn();
        }

        duration = time() - start;
        
        print("<pre>" + fn.toString() + "</pre><p>Took " + duration + " miliseconds</p>");
    };

    normal = function () {
        var i,
            max = 0,
            len = data.length;
        
        for (i = 0; i < len; i += 1) {
            if (data[i] > max) {
                max = data[i];
            }
        }
        
        return max;
    };
    
    lengthCheckedInForLoop = function () {
        var i,
            max = 0;
        
        for (i = 0; i < data.length; i += 1) {
            if (data[i] > max) {
                max = data[i];
            }
        }
        
        return max;
    };

    unrolled = function () {
        var i,
            j,
            max = 0,
            len = data.length;
        
        for (i = 0, j = len - 1; i <= j; i += 1, j -= 1) {
            if (data[i] > max) {
                max = data[i];
            }
            if (data[j] > max) {
                max = data[j];
            }
        }
        
        return max;
    };
    
    veryUnrolled = function () {
        var...