2012-10-08 9 views
8

मैं कोल्डफ्यूजन का उपयोग करके विकसित करना चाहता हूं और जानना चाहता हूं कि बड़े क्वेरी परिणाम सेट पर लूप करने की सबसे अच्छी रणनीति क्या है। क्या cfloop और cfoutput का उपयोग करने के बीच कोई प्रदर्शन अंतर है? यदि नहीं, तो क्या एक दूसरे को पसंद करने का कोई कारण है?cfloop बनाम cfoutput प्रश्नों पर

उत्तर

12

मेरा मानना ​​है कि वहां होता था। मुझे लगता है कि इस अंतर का सामना किया गया है, सबसे अच्छा शर्त है कि आप प्रत्येक के लिए विशिष्ट उपयोग मामले में परीक्षण करने के लिए एक परीक्षण करना है।

<cfset t = GetTickCount()/> 
<cf... query="qry"> 
    <!--- Do something ---> 
</cf...> 
<cfset dt = GetTickCount() - t/> 
<cfdump var="#dt#"/> 
<!--- 
If the differences are small you can use java.lang.System.nanoTime() instead 
---> 

हालांकि कुछ उल्लेखनीय मतभेद हैं। cfoutput समूहित लूप कर सकते हैं, जो cfloop नहीं कर सकता।

<cfoutput query="qry" group="col"> 
    <!--- Loops once for each group ---> 
    <cfoutput> 
    <!--- Loops once for each record within the group ---> 
    </cfoutput> 
</cfoutput> 

cfoutput के लिए आप startrow और maxrows (या संख्या) अपने परिणाम पृष्ठ पर अंक लगाना करने के लिए निर्दिष्ट कर सकते हैं। cfloop के लिए आपको गिनती के बजाय endrow अनुक्रमणिका निर्दिष्ट करना होगा।

इसके अलावा आप मौजूदा cfoutput टैग के भीतर घोंसला वाली क्वेरी के लिए cfoutput का उपयोग नहीं कर सकते हैं, तो आपको पहले cfoutput युक्त अंतराल की आवश्यकता होगी।

+3

कोल्डफ्यूजन 10 में अब आप समूहीकृत आउटपुट कर सकते हैं। – ale

+1

अच्छा, मैं इसे समूहबद्ध cfloops का मतलब लेता हूं http://www.bennadel.com/blog/2359-ColdFusion-10-Using-The-Group-Attribute-With-CFLoop-To-Group-Query-Rows.htm –

+0

रेलो 4 के लिए भी लागू होता है।0 –

1

किसी भी विधि का उपयोग करके प्रदर्शन अंतर नहीं होगा, यह वास्तव में आपकी कोडिंग शैली पर निर्भर करता है। यदि आप प्रत्येक पृष्ठ के ऊपर और नीचे <cfoutput> डालते हैं तो <cfloop> का उपयोग करके बहुत अच्छा काम करेगा। यदि आप एकाधिक <cfoutput> का उपयोग करते हैं और केवल वही जगह जहां उन्हें आवश्यकता होती है जो काम करता है।

मैंने व्यक्तिगत रूप से केवल <cfoutput> डाल दिया जहां वे आवश्यक हैं, लेकिन मैं यह नहीं कहूंगा कि पृष्ठ के शीर्ष और निचले हिस्से में उन्हें रखने से कहीं अधिक सही है।

+0

आप केवल cfoutput के साथ समूह = "" का उपयोग करने में सक्षम होने की क्षमता का उल्लेख करना भूल गए हैं (रेलो 4 लूप पर समूह की अनुमति देता है)। – Busches

2

मेरा मानना ​​है कि यह प्रदर्शन के रूप में सभी एक ही है, Ben Forta

और बाकी काफी व्यक्तिगत पसंद के रूप में अब तक कैसे आप "की तरह" अपने पाश के साथ काम करने के रूप में है। ध्यान रखें कि आपको हमेशा अपने चर का दायरा रखना चाहिए, लेकिन एक सीएफआउटपुट लूप के अंदर जो विशेष रूप से महत्वपूर्ण होगा क्योंकि पूछताछ फ़ील्ड को उनके दायरे के संदर्भ में संदर्भित किया जा सकता है।

एक कारण यह है कि आप सीएफएलओप दृष्टिकोण को प्राथमिकता दे सकते हैं यदि आपको किसी भी कारण से अपने लूप के दौरान cfoutput "से बचने" की आवश्यकता होती है। मैंने कई बार भाग लिया है, इसलिए मैं आमतौर पर सीएफएलओओपी पसंद करता हूं।

3

cfoutput के बजाय cfloop का उपयोग करने का एक अच्छा कारण यह है कि यदि आपको किसी अन्य क्वेरी आउटपुट में क्वेरी आउटपुट लूप करने की आवश्यकता है तो cfoutput नेस्टेड क्वेरी आउटपुट का समर्थन नहीं करता है। हालांकि आप cfloops का उपयोग कर इसे दूर कर सकते हैं। तो:

<cfoutput query="test1"> 
    #test1ID# 
    <cfoutput query="test2"> 
     #test2ID# 
    </cfoutput> 
</cfoutput> 

काम नहीं करता है, लेकिन यदि आप cfoutputs को cfloops के साथ प्रतिस्थापित करते हैं, तो यह होगा।

सीएफ 10 के रूप में, सीएफएलओप्स समूह करने की क्षमता के साथ, यह एकमात्र शेष कार्यात्मक अंतर है। वे दोनों एक ही प्रदर्शन करते हैं।

संबंधित मुद्दे