9

私は ColdFusion を使用して開発を行っており、大規模なクエリ結果セットをループする最適な方法を知りたいと考えていました。cfloop と cfoutput の使用にパフォーマンスの違いはありますか? そうでない場合、どちらか一方を優先する理由はありますか?

4

4 に答える 4

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指定して、結果をページ付けすることができます。カウントの代わりにインデックスを指定する必要があるためです。startrowmaxrowscfloopendrow

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

于 2012-10-08T13:45:40.463 に答える
3

cfoutput の代わりに cfloop を使用する正当な理由の 1 つは、別のクエリ出力内でクエリ出力をループする必要がある場合です。cfoutput はネストされたクエリ出力をサポートしていません。ただし、cfloops を使用して回避できます。そう:

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

動作しませんが、cfoutputs を cfloops に置き換えると動作します。

CF10 の時点で、cfloops をグループ化する機能が追加されましたが、それが唯一残っている機能上の違いです。どちらも同じように機能します。

于 2012-10-08T15:34:48.460 に答える
2

パフォーマンスと同じだと思います、ベン・フォルタ

あとは、ループをどのように操作するのが好きかという点で、ほとんど個人的な好みです。常に変数のスコープを設定する必要がありますが、スコープを参照せずにクエリ フィールドを「参照できる」ため、cfoutput ループ内では特に重要です。

何らかの理由でループ中に cfoutput を「エスケープ」する必要がある場合は、cfloop アプローチを好む可能性があります。私は何度かそれに遭遇したので、一般的には cfloop を好みます。

于 2012-10-08T13:46:12.390 に答える
1

どちらの方法を使用してもパフォーマンスに違いはありません。実際にはコーディング スタイルに依存します。<cfoutput>すべてのページの上部と下部にa を配置すると、<cfloop>うまく機能します。<cfoutput>複数の必要な場所のみを使用する場合も同様に機能します。

個人的に<cfoutput>は必要なところにだけ置いていますが、ページの上下に置くより正しいとは言えません。

于 2012-10-08T13:44:07.403 に答える