はじめに AigleというPromiseライブラリを開発しています。このライブラリはベンチマーク上だけでなく実際の本番環境を考慮した高速化を実現しています。 今回はその過程でBluebirdに大変お世話になったので、なぜBluebirdが速いのか、そしてなぜAigleが速いのかついて説明したいと思います。 基本的なPromiseの知識 まず本題に入る前にPromiseの基本的なことを説明しておきます。 Promiseにはpending, fulfilled, rejectedの3つの状態があります。一度pendingから別の状態に変わった場合は、そのPromiseの状態が変わることはありません。 (引用: MDN) またPromiseは非同期であることが保証されています。この事は少し重要なので触れておきます。 new Promise(resolve => resolve(1)) // 同期
![最速のPromiseライブラリ作る方法 - Qiita](https://cdn-ak-scissors.b.st-hatena.com/image/square/db6036f41086c86d676eebede4d06181eff9f4eb/height=288;version=1;width=512/https%3A%2F%2Fqiita-user-contents.imgix.net%2Fhttps%253A%252F%252Fcdn.qiita.com%252Fassets%252Fpublic%252Farticle-ogp-background-412672c5f0600ab9a64263b751f1bc81.png%3Fixlib%3Drb-4.0.0%26w%3D1200%26mark64%3DaHR0cHM6Ly9xaWl0YS11c2VyLWNvbnRlbnRzLmltZ2l4Lm5ldC9-dGV4dD9peGxpYj1yYi00LjAuMCZ3PTk3MiZoPTM3OCZ0eHQ9JUU2JTlDJTgwJUU5JTgwJTlGJUUzJTgxJUFFUHJvbWlzZSVFMyU4MyVBOSVFMyU4MiVBNCVFMyU4MyU5NiVFMyU4MyVBOSVFMyU4MyVBQSVFNCVCRCU5QyVFMyU4MiU4QiVFNiU5NiVCOSVFNiVCMyU5NSZ0eHQtYWxpZ249bGVmdCUyQ3RvcCZ0eHQtY29sb3I9JTIzMjEyMTIxJnR4dC1mb250PUhpcmFnaW5vJTIwU2FucyUyMFc2JnR4dC1zaXplPTU2JnM9MzYxODFmZjA0MzAxZjMwYmVlMWMxMzJmZjBhNzdhYjQ%26mark-x%3D142%26mark-y%3D57%26blend64%3DaHR0cHM6Ly9xaWl0YS11c2VyLWNvbnRlbnRzLmltZ2l4Lm5ldC9-dGV4dD9peGxpYj1yYi00LjAuMCZoPTc2Jnc9NzcwJnR4dD0lNDBzdWd1cnUwMyZ0eHQtY29sb3I9JTIzMjEyMTIxJnR4dC1mb250PUhpcmFnaW5vJTIwU2FucyUyMFc2JnR4dC1zaXplPTM2JnR4dC1hbGlnbj1sZWZ0JTJDdG9wJnM9YzJmNjc3YmQ0Yzk2MzM0MmVlZTY0ZjIwMDIzY2U2ZDM%26blend-x%3D142%26blend-y%3D486%26blend-mode%3Dnormal%26s%3D6947cab9fed5b550fc921d78d96e378e)