2012-10-08 6 views
8

Sviluppo utilizzando ColdFusion e volevo sapere qual è la strategia migliore per eseguire il loop su set di risultati di query di grandi dimensioni. C'è qualche differenza di prestazioni tra l'utilizzo di cfloop e cfoutput? In caso contrario, c'è qualche motivo per preferire uno rispetto all'altro?cfloop vs cfoutput su query

risposta

12

Credo che ci fosse. Penso che questa differenza sia stata affrontata, la soluzione migliore è fare un test per ognuno di voi per testare il caso specifico.

<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 
---> 

Tuttavia ci sono alcune differenze notevoli. cfoutput può fare loop raggruppati, che non è possibile fare cfloop.

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

Per cfoutput è possibile specificare il startrow e la maxrows (o il conteggio) per impaginare il risultato. Per cfloop devi specificare l'indice endrow invece del conteggio.

Inoltre, non è possibile utilizzare cfoutput per una query nidificata all'interno di un tag cfoutput esistente, è necessario terminare prima il contenitore contenente cfoutput.

+3

In ColdFusion 10 ora è possibile eseguire l'output raggruppato. – ale

+1

Bello, suppongo che intenda raggruppato cfloops http://www.bennadel.com/blog/2359-ColdFusion-10-Using-The-Group-Attribute-With-CFLoop-To-Group-Query-Rows.htm –

+0

Lo stesso vale per Railo 4.0 –

1

Non ci sarebbe una differenza di prestazioni usando entrambi i metodi, dipende davvero dallo stile di codifica. Se metti un <cfoutput> nella parte superiore e inferiore di ogni pagina, allora usando <cfloop> funzionerà benissimo. Se si utilizza più <cfoutput> e si utilizza solo il punto in cui sono necessari.

Io personalmente inserisco <cfoutput> solo dove sono necessari, ma non direi che è più corretto di posizionarli nella parte superiore e inferiore della pagina.

+0

Hai dimenticato di menzionare la possibilità di essere in grado di utilizzare group = "" solo con cfoutput (Railo 4 consente il loop di gruppo). – Busches

2

credo che sia lo stesso come le prestazioni, Ben Forta

E il resto è più o meno preferenze personali quanto come "tipo" di lavorare con il vostro ciclo. Tieni presente che devi sempre definire l'ambito delle variabili, ma all'interno di un ciclo cfoutput che sarebbe particolarmente importante poiché i campi di query "potrebbero" essere referenziati senza fare riferimento al loro ambito.

un motivo per cui si potrebbe preferire l'approccio cfloop sarebbe se fosse necessario "sfuggire" cfoutput durante il ciclo per qualsiasi motivo. Ho incontrato diverse volte, quindi generalmente preferisco cfloop.

3

Un buon motivo per utilizzare cfloop invece di cfoutput è se è necessario eseguire il ciclo di un output di query all'interno di un altro output di query. Cfoutput non supporta l'output di query nidificate. Puoi comunque farla franca usando cfloops. Quindi:

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

non funziona, ma se si sostituisce il cfoutputs con cfloops, lo farà.

A partire da CF10, con la possibilità di raggruppare cfloops, questa è l'unica differenza funzionale rimanente. Entrambi si comportano allo stesso modo.

Problemi correlati