smushoff

JavaScript performance comparison

Test case created and last updated

Preparation code

<script src="http://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js"></script>
 
<script>
Benchmark.prototype.setup = function() {
    reports = [
        {report_id: 0, employee_id: 123, full_name: 'Greg', role: 'Solutionist', payroll_date: 'June', earnings: 0},
        {report_id: 1, employee_id: 456, full_name: 'Isaac', role: 'Solutionist', payroll_date: 'June', earnings: -10},
        {report_id: 2, employee_id: 789, full_name: 'Chris', role: 'Dork', payroll_date: 'June', earnings: -100}
    ];
   
    components = [
        {component_id: 1, report_id: 0, component_display: 'Component Name', component_group: 'Commission'},
        {component_id: 2, report_id: 0, component_display: 'Component Name', component_group: 'Bonus'},
        {component_id: 1, report_id: 1, component_display: 'Component Name', component_group: 'Commission'},
        {component_id: 2, report_id: 1, component_display: 'Component Name', component_group: 'Bonus'},
        {component_id: 1, report_id: 2, component_display: 'Component Name', component_group: 'Commission'},
        {component_id: 2, report_id: 2, component_display: 'Component Name', component_group: 'Bonus'},
        {component_id: 3, report_id: 2, component_display: 'Component Name', component_group: 'Bonus'}
    ];
   
                function bettersmush(obj1,obj2,on) {
                        var out = [];
                        $.map(obj1, function (n) {
    var t = obj2.filter( function () {
                                        return n['on'] == this['on']
                                });
                                $.extend({}, n, t)
                                out.push (n);
                        })
                        return out;
                }
   
                function smush(obj1, obj2, on, into) {
                        // merge [obj1] and [obj2] based [on] common attr [into] new element
                        var out = [];
                        $(obj1).each(function () {
                                out.push(this);
                                var id = this[on];
                                var mem = $(obj2).filter(function () {
                                        return (this[on] == id);
                                });
                               
                                out[out.length-1][into] = [];
                                $(mem).each(function () {
                                        out[out.length-1][into].push(this);    
                                });
                        })
                        return out;
                }
   
    function merge(obj2) {
            this.with = function(obj1) {
                this.on = function (c) {
                        this.into = function (d) {
                                        var out = [];
                                        $(obj1).each(function () {
                                                out.push(this);
                                                var id = this[c];
                                                var mem = $(obj2).filter(function () {
                                                        return (this[c] == id);
                                                });
                                               
                                                out[out.length-1][d] = [];
                                                $(mem).each(function () {
                                                        out[out.length-1][d].push(this);       
                                                });
                                        })
                                        return out;
                        }
                        return this;
                }
   
                return this;
            }
        }
};
</script>

Preparation code output

Test runner

Warning! For accurate results, please disable Firebug before running the tests. (Why?)

Java applet disabled.

Testing in unknown unknown
Test Ops/sec
SMUSH
var r1 = smush(reports, components, 'report_id', 'components');
pending…
BETTERSMUSH
var r1 = bettersmush(reports, components, 'report_id', 'components');
pending…
Chaining
        var data = new merge(components).with(reports).on('report_id').into('components');
 
pending…

You can edit these tests or add even more tests to this page by appending /edit to the URL.

Compare results of other browsers

0 comments

Add a comment