首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >cfloop vs cfoutput on queries

cfloop vs cfoutput on queries
EN

Stack Overflow用户
提问于 2012-10-08 21:36:23
回答 4查看 8.6K关注 0票数 9

我使用ColdFusion进行开发,想知道循环遍历大型查询结果集的最佳策略是什么。使用cfloop和cfoutput有性能上的区别吗?如果不是,有什么理由偏爱其中一个呢?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2012-10-08 21:45:40

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

代码语言:javascript
复制
<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不能做到的。

代码语言:javascript
复制
<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

票数 12
EN

Stack Overflow用户

发布于 2012-10-08 23:34:48

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

代码语言:javascript
复制
<cfoutput query="test1">
   #test1ID#
   <cfoutput query="test2">
      #test2ID#
   </cfoutput>
</cfoutput>

不起作用,但如果您将cfoutput替换为cfloops,它会起作用。

对于CF10,由于能够对cfloops进行分组,这是仅存的功能差异。它们的性能是一样的。

票数 3
EN

Stack Overflow用户

发布于 2012-10-08 21:46:12

我相信这和性能是一样的,Ben Forta

至于你“喜欢”如何使用你的循环,剩下的只是你个人的喜好。请记住,您应该始终限定变量的作用域,但在cfoutput循环中,这将特别重要,因为查询字段“可以”在不引用其作用域的情况下被引用。

您可能更喜欢cfloop方法的一个原因是,无论出于什么原因,您都需要在循环期间“转义”cfoutput。我已经遇到过好几次了,所以我通常更喜欢cfloop。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12782894

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档