2

我有一个检索一些数据的查询。考虑到不同 div 标签中的某些条件,我想显示该数据。现在我的问题是,我通过循环一次查询并在三个不同的结构中获取数据并在显示时使用这些结构来做到这一点。这是一个好方法还是每次在每个 div 中循环查询以检查条件是正确的方法?

     <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
4

2 回答 2

4

我认为你必须稍微编辑你的问题,举个例子。

更少的循环总是最好的方法:) 如果没有必要,更少的转换是最好的方法:)

如果您的数据在一个查询中,则无需循环多次,我猜...

于 2010-05-06T06:53:21.710 回答
0

最好的方法总是取决于您的具体问题。

尽管更少的循环迭代总是会带来更快的性能,但有时为了提高可读性而牺牲一些性能是可以接受的。

维护成本通常是软件中最昂贵的部分,因此让您的代码易于阅读是值得的。

在这种特定情况下:

  • 除非getAttributes查询结果异常大(例如超过 10000 行)或此页面的加载异常频繁(例如超过一次/秒),否则您循环它的次数可能不会产生明显的差异。

  • 无论如何,这两个选项将花费完全相同的时间:第一个选项循环查询两次。第二个选项循环遍历查询一次以填充两个结构,然后您的显示代码循环遍历每个生成的结构(它们组合起来的元素数量与查询的行数相同),从而产生相同的总迭代次数(相当于getAttributes.recordcount*2)。

  • 将查询结果拆分为不同结构的代码有些不寻常,从而降低了可读性并增加了维护成本。由于它实际上并没有提高性能,因此完全适得其反,不应使用。

于 2012-12-22T05:22:40.443 回答