Coldfusion 查询上的cfloop与cfoutput

Coldfusion 查询上的cfloop与cfoutput,coldfusion,cfloop,Coldfusion,Cfloop,我使用ColdFusion进行开发,想知道在大型查询结果集上循环的最佳策略是什么。使用cfloop和cfoutput之间有什么性能差异吗?如果不是,有什么理由选择其中一种方法而不是另一种方法吗?使用这两种方法都不会有性能差异,这实际上取决于您的编码风格。如果您在每页的顶部和底部都放置一个,那么使用将非常有效。如果您使用多个,并且只在需要它们的地方使用,则同样有效 我个人只把放在需要的地方,但我不会说这比把它们放在页面的顶部和底部更正确。我相信过去有。我认为这个差异已经解决了,最好的办法是在您特定

我使用ColdFusion进行开发,想知道在大型查询结果集上循环的最佳策略是什么。使用cfloop和cfoutput之间有什么性能差异吗?如果不是,有什么理由选择其中一种方法而不是另一种方法吗?

使用这两种方法都不会有性能差异,这实际上取决于您的编码风格。如果您在每页的顶部和底部都放置一个
,那么使用
将非常有效。如果您使用多个
,并且只在需要它们的地方使用,则同样有效


我个人只把
放在需要的地方,但我不会说这比把它们放在页面的顶部和底部更正确。

我相信过去有。我认为这个差异已经解决了,最好的办法是在您特定的用例中对每个测试进行测试

<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
,您可以指定
startrow
maxrows
(或计数)来分页结果。对于
cfloop
,必须指定
endrow
索引而不是计数


另外,对于嵌套在现有
cfoutput
标记中的查询,您不能使用
cfoutput
,您需要首先结束包含
cfoutput
的查询。

我相信这与性能是一样的

至于你“喜欢”如何使用你的循环,其余的都是个人喜好。请记住,您应该始终确定变量的范围,但在cfoutput循环中,这一点尤为重要,因为查询字段“可以”在不引用其范围的情况下被引用


您可能更喜欢cfloop方法的一个原因是,如果出于任何原因需要在循环期间“转义”cfoutput。我已经多次遇到这种情况,所以我通常更喜欢cfloop。

使用cfloop而不是cfoutput的一个很好的理由是,如果需要在另一个查询输出中循环查询输出,cfoutput不支持嵌套查询输出。但是,您可以使用cfloops来摆脱它。因此:

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

#test1ID#
#test2ID#
不起作用,但是如果用cfloops替换cfoutputs,它会起作用


从CF10开始,由于能够对CFLOOP进行分组,这是唯一剩下的功能差异。它们的性能都相同。

你忘了提到只能将group=”“与cfoutput一起使用的功能(Railo 4允许group on loop)。在ColdFusion 10中,你现在可以进行分组输出。很好,我想你是说,今年在cfObjective上,分组cfloops的意思是Micah(Railo dev)说,所有内容都被编译成字节码,因此,在你的页面上有20个
与1相比不会影响性能(我希望我使用了正确的术语),我不确定结论是否正确。这实际上取决于编译器如何将CFML页面编译成字节码,但我确实同意,编译器很可能至少会删除JVM中不必要的指令。这将弥补大多数CFML效率低下的情况。
<cfoutput query="test1">
   #test1ID#
   <cfoutput query="test2">
      #test2ID#
   </cfoutput>
</cfoutput>