Manual Extension vs Prototypical Extend

JavaScript performance comparison

Test case created by Asavi

Info

Testing manual extension.

Preparation code

 
<script>
Benchmark.prototype.setup = function() {
    var global = [
      {
        "title": "Soul Eater Not!",
                "day": "tuesday",
                "dayNum": 2,
                "time": 1540,
                "total": "?",
                "out": 1,
                "airingStatus": "airing",
                "tags": ["comedy","school","action"],
                "provider": "funimation"
      },
                {
                        "title": "No Game No Life",
                        "day": "wednesday",
                        "dayNum": 3,
                        "time": 1130,
                        "total": 12,
                        "out": 1,
                        "airingStatus": "airing",
                        "tags": ["comedy","adventure","action","fantasy"],
                        "provider": "crunchyroll"
                },
                {
                        "title": "Hitsugi no Chaika",
                        "day": "wednesday",
                        "dayNum": 3,
                        "time": 1400,
                        "total": 12,
                        "out": 1,
                        "airingStatus": "airing",
                        "tags": ["comedy","adventure","action","fantasy"],
                        "provider": "crunchyroll"
                },
                {
                        "title": "Fuuun Ishin Dai Shogun",
                        "day": "wednesday",
                        "dayNum": 3,
                        "time": 1430,
                        "total": 12,
                        "out": 1,
                        "airingStatus": "airing",
                        "tags": ["action","mecha"],
                        "provider": "crunchyroll"
                },
                {
                        "title":"Kanojo ga Flag wo Oraretara",
                        "day": "wednesday",
                        "dayNum": 3,
                        "time": 1500,
                        "total": "?",
                        "out": 1,
                        "airingStatus": "airing",
                        "tags": ["comedy","romance","school"],
                        "provider": "crunchyroll"
                },
                {
                        "title": "Escha & Logy no Atelier",
                        "day": "thursday",
                        "dayNum": 4,
                        "time": 900,
                        "total": "?",
                        "out": 1,
                        "airingStatus": "airing",
                        "tags": ["fantasy","adventure"],
                        "provider": "none"
                },
                {
                        "title": "Gochuumon wa Usagi Desu ka?",
                        "day": "thursday",
                        "dayNum": 4,
                        "time": 1030,
                        "total": "?",
                        "out": 1,
                        "airingStatus": "airing",
                        "tags": ["comedy","slice of life"],
                        "provider": "crunchyroll"
                }
    ];
   
    var user = [
                {
                        "title": {"value": "Kanojo ga Flag wo Oraretara"},
                        "watched": {"value": 1},
                        "score": {"value": 7},
                        "subs": {"value": "Underwater"}
                },
                {
                        "title": {"value": "Soul Eater Not!"},
                        "watched": {"value": 1},
                        "score": {"value": 6},
                        "subs": {"value": "HorribleSubs"}
                },
                {
                        "title": {"value": "No Game No Life"},
                        "watched": {"value": 1},
                        "score": {"value": 7},
                        "subs": {"value": "Underwater-FFF"}
                },
                {
                        "title": {"value": "Hitsugi no Chaika"},
                        "watched": {"value": 1},
                        "score": {"value": 7},
                        "subs": {"value": "Anime-Koi"}
                },
                {
                        "title": {"value": "Gochuumon wa Usagi Desu ka?"},
                        "watched": {"value": 1},
                        "score": {"value": 7},
                        "subs": {"value": "Vivid-Taku"}
                }
    ]
   
    Array.prototype.filtery = function(index, value){
      for(var i=0,j=this.length; i<j; i++){
          if(this[i][index] === value) return this[i];
      }
    }
};
</script>

Test runner

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

Java applet disabled.

Testing in unknown unknown
Test Ops/sec
manual
var after = user.map(function(e){
  var globalshow = global.filtery("title", e.title.value);
  globalshow.extend = extend;
  return globalshow.extend(e, ["watched","subs","score"]);
})

function extend(obj, props){
    for(var i=0,j=props.length;i<j;i++){
        this[props[i]] = obj[props[i]];
    }
    return this;
}
pending…
oneliner
var after = user.map(function(e){
  var globalshow = global.filtery("title", e.title.value);
  globalshow.extend = extend;
        return globalshow.extend(e);
});

function extend(){
  return [].reduce.call(arguments, Object.create, this);
}
 
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