题
我有一个检索一些数据的查询。我想在不同的DIV标签中显示某些条件的数据。现在我的问题是,我正在通过循环查询一次并在显示时使用这些结构来进行此操作。这是每次DIV中每次都在查询中循环的好方法还是循环检查条件是RIRHT方法吗?
<tr >
<td >
features:
</td>
<td >
<cfloop query="getAttributes">
<cfif getAttributes.type_id EQ 1>
#getAttributes.seat#<br>
</cfif>
</cfloop>
</td>
</tr>
<tr>
<td >
Disclosures:
</td>
<td >
<cfloop query="getAttributes">
<cfif getAttributes.type_id EQ 2>
#getTicketAttributes.seat#<br>
</cfif>
</cfloop>
</td>
</tr>
还是我可以使用以下方法
seatStruct
disclosureStruct
<cfloop query="getAttributes">
<cfif getAttributes.type_id EQ 1>
Insert seatStruct
<cfelseif getAttributes.type_id EQ 2>
insert disclosureStruct
</cfif>
Now use these structs to display
解决方案
我认为您必须稍作编辑一些示例。
较少的循环始终是最好的方法:)如果没有必要的话,更少的转换是最好的方法:)
如果您的数据在一个查询中,那么我猜没有不需要一次循环...
其他提示
最佳方法将始终取决于您的特定问题。
尽管较少的循环迭代始终会导致性能更快,但有时为了提高可读性而牺牲某些性能是可以接受的。
维护成本通常是软件中最昂贵的部分,因此值得使您的代码易于阅读。
在这种特定情况下:
除非
getAttributes
查询结果异常大(例如超过10000行),或者此页面异常加载(例如不止一次/秒),这可能不会引起明显的差异,您可以在它上循环多少次。无论如何,这两个选项都将花费完全相同的时间:第一个选项循环查询两次。第二个选项通过查询一次循环以填充两个结构,然后您的显示代码循环通过每个生成的结构(组合的元素数量与查询的数量相同),从而导致总迭代的精确数量(相当于
getAttributes.recordcount*2
).将查询结果分为不同结构的代码在某种程度上是不寻常的,从而降低了可读性并增加了维护成本。由于它实际上并不能提高性能,因此完全适得其反,不应使用。
不隶属于 StackOverflow