यह मेरी जानकारी है कि जावास्क्रिप्ट के साथ जब आप एक वस्तु पर एक प्रविष्टि को हटाने के लिए है, कम से कम क्रोम के साथ "शब्दकोश मोड" या "धीमी गति से मोड"
isn दैट 'में वस्तु डालता है एक जावास्क्रिप्ट चीज नहीं; यह कार्यान्वयन क्रोम के अंदर V8 इंजन की विशेषता है। This thread on the V8 users's list चर्चा इस:
[ZenWolf] ... एक वस्तु प्रभाव (sic) कैसे v8 वस्तु को अनुकूलित करेंगे से एक संपत्ति को नष्ट करने के लिए JavaScript "हटाएँ" कीवर्ड का उपयोग करता है? ...
[स्वेन पैन] ... "धीमी गति" पर जाने के लिए एक संपत्ति परिणाम हटाना, यानी वस्तु के गुणों के लिए एक शब्दकोश का उपयोग करना। तो अंगूठे के एक सामान्य नियम के रूप में, 'हटाएं' का उपयोग करके चीज धीमी हो जाती है ...
आप इस प्रभाव को in this JSPerf देख सकते हैं। ध्यान दें कि वी 8 (क्रोम, ओपेरा 20) का उपयोग करने वाले ब्राउज़र delete
के बिना धीमे होते हैं। फ़ायरफ़ॉक्स का नवीनतम स्पाइडरमोन्की किसी भी तरह से अंधेरे से तेज है, आईई 10 और 11 थोड़ा प्रभावित हुआ। (दिलचस्प बात यह है कि इंजन ओपेरा 10.5 से 12 के लिए उपयोग किया जाता है [मुझे लगता है कि यह था], कारकन, delete
द्वारा वी 8 की तुलना में अधिक प्रभावित था।)
यदि आप वेब ब्राउज़र में उपयोग करने के लिए कोड लिख रहे हैं, तो अनुकूलित करना एक विशिष्ट इंजन समय बर्बाद नहीं होता है जब तक कि आप उस इंजन पर एक विशिष्ट, असली दुनिया की प्रदर्शन समस्या का सामना नहीं कर रहे हैं। (और यदि आप हैं, तो एक बार जब आप इसका सामना कर लेंगे, तो सुनिश्चित करें कि वे परिवर्तन अन्य इंजनों को गड़बड़ नहीं करते हैं!)
यदि आप नोडजेएस, सिल्कजेएस आदि के लिए लिख रहे थे, तो निश्चित रूप से V8 के लिए अनुकूलित करना ठीक है (हालांकि समयपूर्व अनुकूलन के सामान्य नियम अभी भी लागू होते हैं), क्योंकि वे विशेष रूप से वी 8 के साथ बनाए जाते हैं।
क्या इस मोड के आसपास कोई अर्थशास्त्र भी है?
सं। जावास्क्रिप्ट के अर्थशास्त्र को विनिर्देशन द्वारा परिभाषित किया गया है, जो यह निर्धारित नहीं करता है कि वस्तुओं को कैसे लागू किया जाता है, बशर्ते उनका व्यवहार spec के अर्थशास्त्र से मेल खाता हो; spec प्रदर्शन मूल रूप से बिल्कुल संबोधित नहीं करता है। वी 8 गतिशील कक्षाओं को ऑन-द-फ्लाई उत्पन्न करके और उन्हें मशीन कोड में संकलित करके वस्तुओं को लागू करता है, लेकिन जब आप उनसे गुण हटाते हैं तो "धीमे" (शब्दकोश) मोड पर वापस आते हैं।लेकिन अन्य इंजनों उन्हें हैश नक्शे के रूप में लागू करने के लिए स्वतंत्र हैं (आप गुण जोड़ने हैं, स्वेन Panne के रूप में और अधिक आम आपरेशन उपर्युक्त उद्धरण में कहा, यह गतिशील रूप से एक व्युत्पन्न वर्ग है, जो doesn't slow things down। बनाता है) या लिंक किए गए गुण की सूची , या फिर कुछ और।
'user.sex हटाएं;' के बाद 'user.sex = null' कभी भी perf मुद्दों में नहीं चलेगा –
@ कॉनर: मैंने इन टिप्पणियों को एक उत्तर में जोड़ दिया है, हम शायद उन्हें अभी साफ़ कर सकते हैं। –