cfloop vs cfoutput查询

时间:2012-10-08 13:36:23

标签: coldfusion cfloop

我使用ColdFusion开发并想知道循环大查询结果集的最佳策略是什么。使用cfloop和cfoutput之间有任何性能差异吗?如果没有,是否有理由更喜欢一个而不是另一个?

4 个答案:

答案 0 :(得分: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

答案 1 :(得分:3)

使用cfloop而不是cfoutput的一个好理由是,如果需要在另一个查询输出中循环查询输出​​,cfoutput不支持嵌套查询输出。然而,你可以使用cfloops逃脱它。所以:

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

不起作用,但如果用cfloops替换cfoutputs,它将会。

从CF10开始,具有分组cfloops的能力,这是剩下的唯一功能差异。它们都表现相同。

答案 2 :(得分:2)

我相信它与性能Ben Forta

完全相同

就你如何“喜欢”使用你的循环而言,剩下的就是个人偏好。请记住,您应该始终对变量进行范围调整,但在cfoutput循环中这一点尤其重要,因为查询字段“可以”在不参考其范围的情况下被引用。

您可能更喜欢cfloop方法的一个原因是,如果您因任何原因需要在循环期间“转义”cfoutput。我已经遇到过好几次了,所以我一般都喜欢cfloop。

答案 3 :(得分:1)

使用任何一种方法都不会有性能差异,这实际上取决于您的编码风格。如果您在每个页面的顶部和底部放置<cfoutput>,那么使用<cfloop>将会很有效。如果您使用多个<cfoutput>,并且仅在需要它们的位置也可以使用。

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