ब्लूबर्ड लेखक यहाँ।
V8 वादों के क्रियान्वयन को जावास्क्रिप्ट सी। में नहीं लिखा गया है । सभी जावास्क्रिप्ट (V8 के अपने सहित) को मूल कोड में संकलित किया गया है। मूल कोड से संकलित होने से पहले, इसके अतिरिक्त, लिखा हुआ जावास्क्रिप्ट, यदि संभव हो (और इसके लायक है), तो उपयोगकर्ता अनुकूलित है। वादे का क्रियान्वयन एक ऐसी चीज है जो सी में लिखे जाने से बहुत अधिक या बिल्कुल भी लाभान्वित नहीं होगा, वास्तव में यह केवल इसे धीमा कर देगा क्योंकि आप जो भी कर रहे हैं वह जावास्क्रिप्ट ऑब्जेक्ट और संचार में हेरफेर कर रहा है।
V8 कार्यान्वयन केवल ब्लूबर्ड के रूप में अनुकूलित नहीं है, यह उदाहरण के लिए वादों के हैंडलर के लिए सरणियों को आवंटित करता है । यह बहुत सारी मेमोरी लेता है, जब प्रत्येक वादे में कुछ सरणियों का आवंटन करना होता है (बेंचमार्क समग्र 80k वादे बनाता है ताकि 160k अप्रयुक्त सरणियों को आवंटित किया जाए)। वास्तव में 99.99% उपयोग के मामलों में कभी भी एक से अधिक बार वादा नहीं किया जाता है, इसलिए इस सामान्य मामले के लिए अनुकूलन करने से भारी स्मृति उपयोग में सुधार होता है।
यहां तक कि अगर V8 ने ब्लूबर्ड के रूप में एक ही अनुकूलन लागू किया, तो यह अभी भी विनिर्देश द्वारा बाधित होगा। बेंचमार्क को new Promise
(ब्लूबर्ड में एक विरोधी पैटर्न) का उपयोग करना पड़ता है क्योंकि ईएस 6 में रूट वादा बनाने का कोई अन्य तरीका नहीं है। new Promise
एक वादा बनाने का एक बहुत ही धीमा तरीका है, पहले निष्पादक फ़ंक्शन एक क्लोजर आवंटित करता है, दूसरा यह तर्क के साथ 2 अलग-अलग क्लोजर्स को पारित किया जाता है। यह 3 बंदे प्रति वादा आवंटित है लेकिन एक बंद पहले से ही एक अनुकूलित वादे की तुलना में अधिक महंगी वस्तु है।
ब्लूबर्ड उपयोग कर सकता है promisify
जो बहुत सारे अनुकूलन सक्षम करता है और कॉलबैक एपीआई का उपभोग करने का एक अधिक सुविधाजनक तरीका है और यह पूरे मॉड्यूल को एक लाइन ( promisifyAll(require('redis'));
) में वादा आधारित मॉड्यूल में बदलने में सक्षम बनाता है ।