我使用ColdFusion进行开发,想知道循环遍历大型查询结果集的最佳策略是什么。使用cfloop和cfoutput有性能上的区别吗?如果不是,有什么理由偏爱其中一个呢?
发布于 2012-10-08 21:45:40
我相信曾经有过。我认为这个差异已经解决了,最好的办法是为每个人做一个测试,以便在您特定的用例中进行测试。
<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,您可以指定startrow和maxrows (或计数)来对结果进行分页。对于cfloop,您必须指定endrow索引而不是计数。
此外,您不能对嵌套在现有cfoutput标记中的查询使用cfoutput,您需要首先结束包含的cfoutput。
发布于 2012-10-08 23:34:48
使用cfloop而不是cfoutput的一个很好的理由是,如果您需要在另一个查询输出中循环查询输出,cfoutput不支持嵌套查询输出。但是,您可以使用cfloops来摆脱它。所以:
<cfoutput query="test1">
#test1ID#
<cfoutput query="test2">
#test2ID#
</cfoutput>
</cfoutput>不起作用,但如果您将cfoutput替换为cfloops,它会起作用。
对于CF10,由于能够对cfloops进行分组,这是仅存的功能差异。它们的性能是一样的。
发布于 2012-10-08 21:46:12
我相信这和性能是一样的,Ben Forta
至于你“喜欢”如何使用你的循环,剩下的只是你个人的喜好。请记住,您应该始终限定变量的作用域,但在cfoutput循环中,这将特别重要,因为查询字段“可以”在不引用其作用域的情况下被引用。
您可能更喜欢cfloop方法的一个原因是,无论出于什么原因,您都需要在循环期间“转义”cfoutput。我已经遇到过好几次了,所以我通常更喜欢cfloop。
https://stackoverflow.com/questions/12782894
复制相似问题