Penulis bluebird di sini.
Implementasi V8 berjanji ditulis dalam JavaScript bukan C. Semua JavaScript (termasuk milik V8) dikompilasi ke kode asli. Selain itu, JavaScript yang ditulis pengguna dioptimalkan, jika mungkin (dan layak), sebelum dikompilasi dengan kode asli. Menjanjikan implementasi adalah sesuatu yang tidak akan mendapat banyak manfaat atau sama sekali dari ditulis dalam C, pada kenyataannya itu hanya akan membuatnya lebih lambat karena semua yang Anda lakukan adalah memanipulasi objek JavaScript dan komunikasi.
Implementasi V8 tidak seoptimal bluebird, contohnya mengalokasikan array untuk penangan janji . Ini membutuhkan banyak memori ketika setiap janji juga harus mengalokasikan beberapa array (Benchmark menciptakan keseluruhan 80 ribu janji sehingga 160r dialokasikan array yang tidak digunakan). Pada kenyataannya, 99,99% kasus penggunaan tidak pernah menumbuhkan janji lebih dari sekali sehingga mengoptimalkan untuk kasus umum ini mendapatkan peningkatan penggunaan memori yang sangat besar.
Bahkan jika V8 mengimplementasikan optimasi yang sama seperti bluebird, itu masih akan terhalang oleh spesifikasi. Patokan harus menggunakan new Promise
(anti-pola di bluebird) karena tidak ada cara lain untuk membuat janji root di ES6. new Promise
adalah cara yang sangat lambat untuk membuat janji, pertama fungsi pelaksana mengalokasikan penutupan, kedua melewati 2 penutupan terpisah sebagai argumen. Itu adalah 3 penutupan yang dialokasikan per janji tetapi penutupan sudah merupakan objek yang lebih mahal daripada janji yang dioptimalkan.
Bluebird dapat menggunakan promisify
yang memungkinkan banyak optimasi dan merupakan cara yang jauh lebih nyaman untuk mengonsumsi API panggilan balik dan memungkinkan konversi seluruh modul menjadi modul berbasis janji dalam satu baris ( promisifyAll(require('redis'));
).