इनमें से कौन सा कोल्डफ्यूजन में अधिक कुशल है?कोल्डफ्यूजन: इसके बजाय अधिक कुशल संरचनाKeyExists() परिभाषित है()
isDefined('url.myvar')
या
structKeyExists(url, 'myvar')
इनमें से कौन सा कोल्डफ्यूजन में अधिक कुशल है?कोल्डफ्यूजन: इसके बजाय अधिक कुशल संरचनाKeyExists() परिभाषित है()
isDefined('url.myvar')
या
structKeyExists(url, 'myvar')
इन दिनों (CF8 +) गति में अंतर नहीं है कि महान। हालांकि, structKeyExists
वास्तव में थोड़ा तेज़ है। यहाँ पर क्यों।
जब आप isDefined
का उपयोग करते हैं, तो आपके द्वारा पारित स्ट्रिंग को कई क्षेत्रों में एक प्रमुख नाम के रूप में खोजा जाता है। CF9, स्कोप की सूची, जाँच के क्रम में है के रूप में: (source)
भले ही आप isDefined
(जैसे: if isDefined('variables.foo')
) के साथ गुंजाइश नाम का उपयोग सूची अभी भी क्रम में जाँच की जाएगी; और यदि परिवर्तनीय local.variables.foo
परिभाषित किया गया है, तो यह variables.foo
से पहले मिलेगा।
दूसरी ओर, structKeyExists
केवल उस कुंजी की खोज करता है जिसे आप कुंजी नाम के अस्तित्व के लिए पास करते हैं; इसलिए वहां बहुत कम जगहें दिखनी पड़ेगी।
अधिक स्पष्ट कोड (structKeyExists
) का उपयोग करके, न केवल आप कुछ प्रदर्शन प्राप्त कर रहे हैं, लेकिन आपकी राय मेरी राय में अधिक पठनीय और रखरखाव योग्य है।
पढ़ने के लिए आसान है और सबसे अच्छा दिखाता है कि आप क्या कर रहे हैं।
दोनों के बीच का अंतर अविश्वसनीय रूप से छोटा है, और बहुत ही चिंताजनक नहीं है।
समय बर्बाद कोड के अनुकूलन जब तक आप एक साबित और repeatable परीक्षण का मामला जो सुस्ती को दर्शाता है नहीं है।
+1। यह समझने के लिए निश्चित रूप से सार्थक है कि कैसे * दोनों कार्य संचालित होते हैं। लेकिन जब तक आपके पास प्रदर्शन समस्या नहीं है, तो पढ़ने योग्य कोड लिखना जो सही ढंग से व्यवहार करता है, कहीं अधिक महत्वपूर्ण आईएमओ है। – Leigh
मैं पूरी तरह से सहमत हूं, लेकिन मैं अभी भी 'structKeyExists' का नियमित उपयोगकर्ता हूं। मुझे लगता है कि इसकी स्पष्ट प्रकृति सब कुछ क्रिस्टल स्पष्ट बनाती है, जहां 'परिभाषित' हमेशा नहीं होता है, जिसके परिणामस्वरूप महीनों या साल बाद पुराने कोड (और/या किसी और के कोड) पर वापस आने पर अधिक समय और सिरदर्द होता है। –
हालांकि IsDefined() अधिक सहजता से नामित है, जो आपने अभी वर्णित किया है, अभी भी प्रदर्शन के बारे में समयपूर्व चिंताओं की तुलना में एक दूसरे को चुनने का एक बेहतर कारण है। कम से कम IMHO ;-) - लीघ 8 मिनट पहले – Leigh
बहुत अच्छा! यह देखना दिलचस्प है कि यह कार्यों को अलग-अलग कैसे संसाधित करता है। –
मुझे यह भी लगता है कि कोल्डफ्यूजन को आपके द्वारा प्रदान की जाने वाली स्ट्रिंग पर एक eval चलाने की आवश्यकता है। StructKeyExists बहुत सारे काम से बचाता है। –
हालांकि 'structKeyExists()' के साथ एक बड़ी समस्या है।यदि आप कोल्डफ्यूज़न के साथ एक JSON स्ट्रिंग को deserialize करते हैं और आपके पास 'myVal'' मान 'शून्य' के साथ एक संपत्ति है, तो 'structKeyExists (ऑब्जेक्ट, "myVal")' 'सत्य 'वापस कर देगा, जबकि' isDefined ("object.myVal") है नहीं होगा या दूसरे शब्दों में, यदि आप 'object.myVal' के साथ 'structKeyExists()' के साथ जांच करने के बाद संपत्ति तक पहुंचने का प्रयास करते हैं, तो आपको एक त्रुटि मिल जाएगी। – android