forked from kriskowal/q
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Beginnings of a performance testing suite.
Use `npm run benchmark`.
- Loading branch information
Showing
3 changed files
with
110 additions
and
1 deletion.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,71 @@ | ||
"use strict"; | ||
|
||
var Q = require("../q"); | ||
var fs = require("fs"); | ||
|
||
suite("A single simple async operation", function () { | ||
bench("with an immediately-fulfilled promise", function (done) { | ||
Q().then(done); | ||
}); | ||
|
||
bench("with direct setImmediate usage", function (done) { | ||
setImmediate(done); | ||
}); | ||
|
||
bench("with direct setTimeout(…, 0)", function (done) { | ||
setTimeout(done, 0); | ||
}); | ||
}); | ||
|
||
suite("A fs.readFile", function () { | ||
var denodeified = Q.denodeify(fs.readFile); | ||
|
||
set("iterations", 1000); | ||
set("delay", 1000); | ||
|
||
bench("directly, with callbacks", function (done) { | ||
fs.readFile(__filename, done); | ||
}); | ||
|
||
bench("with Q.nfcall", function (done) { | ||
Q.nfcall(fs.readFile, __filename).then(done); | ||
}); | ||
|
||
bench("with a Q.denodeify'ed version", function (done) { | ||
denodeified(__filename).then(done); | ||
}); | ||
|
||
bench("with manual usage of deferred.makeNodeResolver", function (done) { | ||
var deferred = Q.defer(); | ||
fs.readFile(__filename, deferred.makeNodeResolver()); | ||
deferred.promise.then(done); | ||
}); | ||
}); | ||
|
||
suite("1000 operations in parallel", function () { | ||
function makeCounter(desiredCount, ultimateCallback) { | ||
var soFar = 0; | ||
return function () { | ||
if (++soFar === desiredCount) { | ||
ultimateCallback(); | ||
} | ||
}; | ||
} | ||
var numberOfOps = 1000; | ||
|
||
bench("with immediately-fulfilled promises", function (done) { | ||
var counter = makeCounter(numberOfOps, done); | ||
|
||
for (var i = 0; i < numberOfOps; ++i) { | ||
Q().then(counter); | ||
} | ||
}); | ||
|
||
bench("with direct setImmediate usage", function (done) { | ||
var counter = makeCounter(numberOfOps, done); | ||
|
||
for (var i = 0; i < numberOfOps; ++i) { | ||
setImmediate(counter); | ||
} | ||
}); | ||
}); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,36 @@ | ||
"use strict"; | ||
|
||
var Q = require("../q"); | ||
|
||
suite("Chaining", function () { | ||
var numberToChain = 1000; | ||
|
||
bench("Chaining many already-fulfilled promises together", function (done) { | ||
var currentPromise = Q(); | ||
for (var i = 0; i < numberToChain; ++i) { | ||
currentPromise = currentPromise.then(function () { | ||
return Q(); | ||
}); | ||
} | ||
|
||
currentPromise.then(done); | ||
}); | ||
|
||
bench("Chaining and then fulfilling the end of the chain", function (done) { | ||
var deferred = Q.defer(); | ||
|
||
var currentPromise = deferred.promise; | ||
for (var i = 0; i < numberToChain; ++i) { | ||
(function () { | ||
var promiseToReturn = currentPromise; | ||
currentPromise = Q().then(function () { | ||
return promiseToReturn; | ||
}); | ||
}()); | ||
} | ||
|
||
currentPromise.then(done); | ||
|
||
deferred.resolve(); | ||
}); | ||
}); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters