2012-10-08 10 views
8

ColdFusionを使用して開発したもので、大きなクエリ結果セットをループする最良の方法は何かを知りたかったのです。 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のために、あなたの結果をページ分割するstartrowmaxrows(または数)を指定することができます。 cfloopの場合は、カウントの代わりにendrowのインデックスを指定する必要があります。

また、既存のcfoutputタグ内にネストされたクエリにcfoutputを使用することはできません。含まれているものは、最初にcfoutputにする必要があります。

+3

ColdFusion 10では、グループ化された出力を行うことができます。 – ale

+1

ニース、グループ化されたcfloopsを意味します。http://www.bennadel.com/blog/2359-ColdFusion-10-Using-The-Group-Attribute-With-CFLoop-To-Group-Query-Rows.htm –

+0

同じことがRailo 4にも適用されます。0 –

1

いずれの方法でもパフォーマンスの差はなく、実際にはコーディングスタイルによって異なります。 <cfoutput>を各ページの上部と下部に配置すると、<cfloop>を使用すると効果的です。複数の<cfoutput>を使用し、必要な場所だけが機能する場合

私は個人的には、必要な場所にのみ<cfoutput>を入れていますが、ページの上部と下部に配置するよりも正しいとは言いません。

+0

cfoutputでgroup = ""を使用できることには言及していません(Railo 4ではgroup onループが可能です)。 – Busches

2

私はそれは、Ben Forta

パフォーマンスなど、すべて同じだと信じて、残りは限りどのようにあなたがループを操作する「のような」など、かなり個人的な好みです。常に変数をスコープする必要がありますが、クエリーフィールドはスコープを参照せずに参照できるため、特に重要なcfoutputループの内側にあることに注意してください。

何らかの理由でループ中にcfoutputを "エスケープ"する必要がある場合には、cfloopアプローチを使用することをお勧めします。私はそれを数回実行しています。だから、私は一般的にcfloopを好む。

3

cfoutputの代わりにcfloopを使用する理由の1つは、別のクエリ出力内でクエリ出力をループする必要がある場合です。cfoutputはネストされたクエリ出力をサポートしていません。しかし、cfloopsを使ってそれを取り除くことができます。だから、:

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

は動作しませんが、あなたはcfloopsとcfoutputsを交換した場合、それはなります。

CF10では、cfloopsをグループ化することができますが、これは唯一の機能上の相違点です。彼らはどちらも同じことをします。

関連する問題