Skip to content

Instantly share code, notes, and snippets.

@ColonelBundy
Last active September 12, 2023 15:54
Show Gist options
  • Star 11 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save ColonelBundy/d57fb9cd16eb87b2d4d932acc1055b30 to your computer and use it in GitHub Desktop.
Save ColonelBundy/d57fb9cd16eb87b2d4d932acc1055b30 to your computer and use it in GitHub Desktop.
Promise vs Callback vs Async/await benchmark 2018
Script used:
https://github.com/kyrylkov/promise-async-performance
Platform info:
Windows_NT 10.0.16299 x64
AMD Ryzen 7 1700 Eight-Core Processor × 16
Conclusion:
Callback's takes the cake, async/await is horrible
Doxbee sequential
benchmarking ./doxbee-sequential/async-bluebird.js
{"time":428,"mem":60.38671875,"errors":0,"lastErr":null}
benchmarking ./doxbee-sequential/async-es2017-native.js
{"time":591,"mem":98.82421875,"errors":0,"lastErr":null}
benchmarking ./doxbee-sequential/async-es2017-util.promisify.js
{"time":479,"mem":69.7734375,"errors":0,"lastErr":null}
benchmarking ./doxbee-sequential/callbacks-baseline.js
{"time":149,"mem":29.99609375,"errors":0,"lastErr":null}
benchmarking ./doxbee-sequential/promises-bluebird-generator.js
{"time":267,"mem":40.62109375,"errors":0,"lastErr":null}
benchmarking ./doxbee-sequential/promises-bluebird.js
{"time":329,"mem":49.48046875,"errors":0,"lastErr":null}
benchmarking ./doxbee-sequential/promises-es2015-native.js
{"time":560,"mem":90.82421875,"errors":0,"lastErr":null}
benchmarking ./doxbee-sequential/promises-es2015-util.promisify.js
{"time":513,"mem":71.2734375,"errors":0,"lastErr":null}
results for 10000 parallel executions, 1 ms per I/O op
file time(ms) memory(MB)
callbacks-baseline.js 149 30.00
promises-bluebird-generator.js 267 40.62
promises-bluebird.js 329 49.48
async-bluebird.js 428 60.39
async-es2017-util.promisify.js 479 69.77
promises-es2015-util.promisify.js 513 71.27
promises-es2015-native.js 560 90.82
async-es2017-native.js 591 98.82
Madeup parallel
benchmarking ./madeup-parallel/async-bluebird.js
{"time":597,"mem":115.71875,"errors":0,"lastErr":null}
benchmarking ./madeup-parallel/async-es2017-native.js
{"time":2056,"mem":317.40234375,"errors":0,"lastErr":null}
benchmarking ./madeup-parallel/async-es2017-util.promisify.js
{"time":1421,"mem":201.40625,"errors":0,"lastErr":null}
benchmarking ./madeup-parallel/callbacks-baseline.js
{"time":371,"mem":74.2578125,"errors":0,"lastErr":null}
benchmarking ./madeup-parallel/promises-bluebird-generator.js
{"time":604,"mem":111.328125,"errors":0,"lastErr":null}
benchmarking ./madeup-parallel/promises-bluebird.js
{"time":564,"mem":106.125,"errors":0,"lastErr":null}
benchmarking ./madeup-parallel/promises-es2015-native.js
{"time":1762,"mem":305.1484375,"errors":0,"lastErr":null}
benchmarking ./madeup-parallel/promises-es2015-util.promisify.js
{"time":1314,"mem":192.19921875,"errors":0,"lastErr":null}
results for 10000 parallel executions, 1 ms per I/O op
file time(ms) memory(MB)
callbacks-baseline.js 371 74.26
promises-bluebird.js 564 106.13
async-bluebird.js 597 115.72
promises-bluebird-generator.js 604 111.33
promises-es2015-util.promisify.js 1314 192.20
async-es2017-util.promisify.js 1421 201.41
promises-es2015-native.js 1762 305.15
async-es2017-native.js 2056 317.40
Platform info:
Windows_NT 10.0.16299 x64
Node.JS 8.9.4
V8 6.1.534.50
AMD Ryzen 7 1700 Eight-Core Processor × 16
Doxbee sequential
benchmarking ./doxbee-sequential/async-bluebird.js
{"time":363,"mem":57.234375,"errors":0,"lastErr":null}
benchmarking ./doxbee-sequential/async-es2017-native.js
{"time":413,"mem":93.171875,"errors":0,"lastErr":null}
benchmarking ./doxbee-sequential/async-es2017-util.promisify.js
{"time":382,"mem":65.4609375,"errors":0,"lastErr":null}
benchmarking ./doxbee-sequential/callbacks-baseline.js
{"time":152,"mem":25.5625,"errors":0,"lastErr":null}
benchmarking ./doxbee-sequential/promises-bluebird-generator.js
{"time":248,"mem":36.40625,"errors":0,"lastErr":null}
benchmarking ./doxbee-sequential/promises-bluebird.js
{"time":251,"mem":46.23828125,"errors":0,"lastErr":null}
benchmarking ./doxbee-sequential/promises-es2015-native.js
{"time":413,"mem":89.1015625,"errors":0,"lastErr":null}
benchmarking ./doxbee-sequential/promises-es2015-util.promisify.js
{"time":436,"mem":63.33203125,"errors":0,"lastErr":null}
results for 10000 parallel executions, 1 ms per I/O op
file time(ms) memory(MB)
callbacks-baseline.js 152 25.56
promises-bluebird-generator.js 248 36.41
promises-bluebird.js 251 46.24
async-bluebird.js 363 57.23
async-es2017-util.promisify.js 382 65.46
async-es2017-native.js 413 93.17
promises-es2015-native.js 413 89.10
promises-es2015-util.promisify.js 436 63.33
Madeup parallel
benchmarking ./madeup-parallel/async-bluebird.js
{"time":445,"mem":109.73046875,"errors":0,"lastErr":null}
benchmarking ./madeup-parallel/async-es2017-native.js
{"time":1420,"mem":312.7578125,"errors":0,"lastErr":null}
benchmarking ./madeup-parallel/async-es2017-util.promisify.js
{"time":1029,"mem":195.8515625,"errors":0,"lastErr":null}
benchmarking ./madeup-parallel/callbacks-baseline.js
{"time":298,"mem":73.140625,"errors":0,"lastErr":null}
benchmarking ./madeup-parallel/promises-bluebird-generator.js
{"time":502,"mem":104.19921875,"errors":0,"lastErr":null}
benchmarking ./madeup-parallel/promises-bluebird.js
{"time":455,"mem":103.63671875,"errors":0,"lastErr":null}
benchmarking ./madeup-parallel/promises-es2015-native.js
{"time":1300,"mem":300.89453125,"errors":0,"lastErr":null}
benchmarking ./madeup-parallel/promises-es2015-util.promisify.js
{"time":1073,"mem":184.8359375,"errors":0,"lastErr":null}
results for 10000 parallel executions, 1 ms per I/O op
file time(ms) memory(MB)
callbacks-baseline.js 298 73.14
async-bluebird.js 445 109.73
promises-bluebird.js 455 103.64
promises-bluebird-generator.js 502 104.20
async-es2017-util.promisify.js 1029 195.85
promises-es2015-util.promisify.js 1073 184.84
promises-es2015-native.js 1300 300.89
async-es2017-native.js 1420 312.76
@zavr-1
Copy link

zavr-1 commented May 9, 2019

yeah I think async/await native is actually slower than promises. Thanks for this data, very useful!

@formula1
Copy link

formula1 commented Mar 4, 2022

I remember reading elsewhere about this, I think when io.js was a thing. Figured I'd look it up again just as a reminder that I'm making my code less perfermant for readability sake. Didnt realize async await was so bad. I actually just read an article that promises are faster than callbacks. Thought that was humorous. I believe with promises, three functions are constructed while with callbacks, one.

It would be nice if a compiler could automatically convert promises into callbacks. I imagine this is possible with typescript so long as a function fits the definition of a CallbackOrPromise.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment