v8 generators vs promises

Benchmark created by Gleb Bahmutov on


Description

Measuring native Chrome promises vs generators

Setup

var large = 100;
    
    // factorial using native promises
    
    function valuePromise(n) {
      return new Promise(function(resolve) {
        return resolve(n);
      });
    }
    
    function factorialPromises(n) {
      var start = valuePromise(n);
      while (n -= 1) {
        start = start.then(function(n, value) {
          // console.log('n', n, 'value', value)
          return value * n;
        }.bind(null, n));
      }
      return start;
    }
    
    // factorial using generators
    
    function * Factorial() {
      var n = 1,
        total = 1;
      while (true) {
        total = total * n++;
        yield total;
      };
    }
    
    function factorial(n) {
      var f = Factorial(),
        k, nf;
      for (k = 0; k < n; k += 1) {
        nf = f.next().value;
      }
      return nf;
    }

Test runner

Ready to run.

Testing in
TestOps/sec
native Promise
// async test
factorialPromises(large).then(function() {
  deferred.resolve();
});
ready
generators
factorial(large);
ready

Revisions

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