Bluebird vs RSVP vs Native (v62)

Revision 62 of this benchmark created by Boris on


Description

A comparison of the two most highly performant promise implementations and the new native promises.

Preparation HTML

<script src="http://rsvpjs-builds.s3.amazonaws.com/rsvp-latest.js"></script>
<script src="https://cdn.jsdelivr.net/bluebird/latest/bluebird.min.js"></script>
<script src="https://cdn.rawgit.com/dfilatov/vow/0.4.7/vow.min.js"></script>
<script>var BPromise = Promise.noConflict(Promise);
if ((Promise + "").indexOf("native") < 0) alert("not native promises");
</script>
<script>
function P(fn) {
  var state = 'pending';
  var value;
  var deferred = null;

  function resolve(newValue) {
    value = newValue;
    state = 'resolved';

    if(deferred) {
      handle(deferred);
    }
  }

  function handle(handler) {
    if(state === 'pending') {
      deferred = handler;
      return;
    }

    if(!handler.onResolved) {
      handler.resolve(value);
      return;
    }

    var ret = handler.onResolved(value);
    handler.resolve(ret);
  }

  this.then = function(onResolved) {
    return new P(function(resolve) {
      handle({
        onResolved: onResolved,
        resolve: resolve
      });
    });
  };

  fn(resolve);
}
</script>

Test runner

Ready to run.

Testing in
TestOps/sec
Bluebird deferred
// async test
function make() {
  return new BPromise(function (resolve, reject) {
      resolve(1)
  })
}

make().then(function (v) { deferred.resolve()  })
ready
RSVP deferred
// async test
function make() {
  var defer = RSVP.defer()

    defer.resolve()

  return defer.promise
}

make().then(function () { deferred.resolve() })
ready
Bluebird classic
// async test
function make() {
  return new BPromise(function (resolve, reject) {
      resolve(1)
  })
}

make().then(function (v) { deferred.resolve()  })
ready
RSVP classic
// async test
function make() {
  return new RSVP.Promise(function (resolve, reject) {
      resolve(1)
  })
}

make().then(function (v) {deferred.resolve()  })
ready
Native Promises
function make() {
  return new Promise(function (resolve, reject) {
      resolve(1)
  })
}

make().then(function (v) { deferred.resolve()  })
ready
VOW deferred
// async test
function make() {
  var defer = vow.defer()

  defer.resolve(1)

  return defer.promise()
}

make().then(function () { deferred.resolve() })
ready
VOW classic
// async test
function make() {
  return new vow.Promise(function (resolve, reject, notify) {
      resolve(1)
  })
}

make().then(function (v) { deferred.resolve() })
ready

Revisions

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