मैं स्ट्रिंग से हस्ताक्षरित 16 बिट मान निकालने के लिए कुछ कोड का उपयोग कर रहा हूं।जावास्क्रिप्ट - स्ट्रिंग.प्रोटोटाइप में जोड़े गए कार्यों के V8 में खराब प्रदर्शन?
मुझे पता चला कि String
के लिए प्रोटोटाइप को यह समारोह जोड़ने:
var UInt16 = function(s, n) {
return s.charCodeAt(n) + 256 * s.charCodeAt(n + 1);
};
Firefox में अंतर:
String.prototype.UInt16 = function(n) {
return this.charCodeAt(n) + 256 * this.charCodeAt(n + 1);
};
सिर्फ एक समारोह जो एक पैरामीटर के रूप में एक String
लेता है की तुलना में बहुत धीमी है केवल दो का कारक है, लेकिन क्रोम 15 में यह एक सौ बार धीमा है!
देखें http://jsperf.com/string-to-uint16
में परिणाम किसी को भी इस के लिए एक स्पष्टीकरण proffer कर सकते हैं, और/या प्रदर्शन हिट के बिना प्रोटोटाइप का उपयोग करने का एक वैकल्पिक तरीका प्रदान करते हैं?
http://groups.google.com/group/nodejs/browse_thread/thread/45d6dc32250c0ad3 कुछ प्रकाश डाल सकता है। यह थोड़ा निराशाजनक है। –
@ क्रिसेंटफ्रेश, मेरा जवाब देखें, यह अभी भी बहुत धीमा है और ऑब्जेक्ट्स का उपयोग करते समय थ्रेड में दावा के रूप में "1% के भीतर" नहीं है ... या शायद मैं इसे गलत कर रहा हूं? – Esailija
@Esailija: मुझे प्रश्न के आपके उत्तर का संबंध नहीं दिख रहा है। परीक्षण मामलों में आपके जोड़ों को बस दिखाया जाता है (जैसे कि Google समूह चर्चा कवर) जो 'स्ट्रिंग' ऑब्जेक्ट के संदर्भ को सहेजते हैं, उस ऑब्जेक्ट पर प्रोटोटाइप विधियों को एक आदिम पर कॉल करने के बजाय तेज़ परिणाम उत्पन्न करते हैं। ओपी को संबोधित करने की कोशिश की जा रही मौलिक समस्या को ऑब्जेक्टिव टाइप जबरन के साथ करना पड़ता है जब मुक्केबाजी एक वस्तु के लिए बार-बार होता है। –