Bluebird burada yazar.
V8, uygulamanın JavaScript’te C’de yazılmadığını vaat eder . Ek olarak, kullanıcının yazdığı JavaScript, mümkünse (ve buna değer), yerel koda göre derlenmeden önce optimize edilmiştir. Uygulama sözü, C'ye yazılmasından fazla ya da hiç yararı olmayacak bir şeydir, aslında sadece yavaşlatır çünkü yaptığınız tek şey JavaScript nesnelerini ve iletişimi kullanmaktır.
V8 uygulaması basitçe bluebird kadar optimize edilmemiştir, örnek olarak vaat edenlerin işleyicileri için diziler ayırır . Her bir sözün bir çift diziyi de tahsis etmesi gerektiğinde bu çok fazla hafıza gerektiriyor (Benchmark genel olarak 80 bin vaat ediyor, bu yüzden kullanılmayan 160 bin dizilim var). Gerçekte, kullanım durumlarının% 99,99'u asla bir defadan fazla bir kez söz vermez, bu nedenle bu yaygın durum için en uygun hale getirme, büyük bellek kullanımı iyileştirmeleri kazanır.
V8, bluebird ile aynı optimizasyonları uygulasa bile, yine de spesifikasyonlar tarafından engellenir. new Promise
ES6'da bir kök vaadi oluşturmak için başka bir yol olmadığından kıyaslama kriterinin (bluebird'de anti-patern) kullanılması gerekir. new Promise
söz vermenin son derece yavaş bir yoludur, ilk olarak yürütücü işlevi bir kapanış ayırır, ikincisi ise argüman olarak 2 ayrı kapanıştan geçer. Bu, söz başına ayrılan 3 kapanış, ancak bir kapanma, zaten optimize edilmiş bir sözden daha pahalı bir nesnedir.
Bluebird promisify
, birçok optimizasyona olanak sağlayan ve geri arama API'lerini tüketmenin çok daha uygun bir yoludur ve tüm modüllerin tek bir satırda söz tabanlı modüle dönüştürülmesini sağlar ( promisifyAll(require('redis'));
).