Skip to content

Instantly share code, notes, and snippets.

@itsbth
Last active November 17, 2017 11:17

Revisions

  1. itsbth revised this gist Nov 17, 2017. 1 changed file with 9 additions and 6 deletions.
    15 changes: 9 additions & 6 deletions suite.js
    Original file line number Diff line number Diff line change
    @@ -34,16 +34,19 @@
    };


    suite.add("av.arrow();", function () {
    av.arrow();
    suite.add("for (let i = 1024; i > 0; i--)", function () {
    for (let i = 1024; i > 0; i--)
    av.arrow();
    });

    suite.add("av.bound();", function () {
    av.bound();
    suite.add("for (let i = 1024; i > 0; i--)", function () {
    for (let i = 1024; i > 0; i--)
    av.bound();
    });

    suite.add("av.self();", function () {
    av.self();
    suite.add("for (let i = 1024; i > 0; i--)", function () {
    for (let i = 1024; i > 0; i--)
    av.self();
    });

    suite.on("cycle", function (evt) {
  2. itsbth created this gist Nov 17, 2017.
    13 changes: 13 additions & 0 deletions index.html
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,13 @@
    <!DOCTYPE html>
    <html>
    <head>
    <meta charset="utf-8"/>
    <title>Bound method showdown</title>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/benchmark/1.0.0/benchmark.min.js"></script>
    <script src="./suite.js"></script>
    </head>
    <body>
    <h1>Open the console to view the results</h1>
    <h2><code>cmd + alt + j</code> or <code>ctrl + alt + j</code></h2>
    </body>
    </html>
    68 changes: 68 additions & 0 deletions suite.js
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,68 @@
    "use strict";

    (function (factory) {
    if (typeof Benchmark !== "undefined") {
    factory(Benchmark);
    } else {
    factory(require("benchmark"));
    }
    })(function (Benchmark) {
    var suite = new Benchmark.Suite;

    Benchmark.prototype.setup = function () {
    class A {
    constructor() {
    this.n = 32;

    this.arrow = () => {
    return this.n++;
    };

    this.bound = this.bound.bind(this);
    const self = this;
    this.self = function () {
    return self.n++;
    };
    }

    bound() {
    return this.n++;
    }
    }

    const av = new A();
    };


    suite.add("av.arrow();", function () {
    av.arrow();
    });

    suite.add("av.bound();", function () {
    av.bound();
    });

    suite.add("av.self();", function () {
    av.self();
    });

    suite.on("cycle", function (evt) {
    console.log(" - " + evt.target);
    });

    suite.on("complete", function (evt) {
    console.log(new Array(30).join("-"));

    var results = evt.currentTarget.sort(function (a, b) {
    return b.hz - a.hz;
    });

    results.forEach(function (item) {
    console.log((idx + 1) + ". " + item);
    });
    });

    console.log("Bound method showdown");
    console.log(new Array(30).join("-"));
    suite.run();
    });