Цикл по Cfquery или Структуре? - PullRequest
2 голосов
/ 06 мая 2010

У меня есть запрос, который получает некоторые данные. Я хочу отобразить эти данные с учетом некоторых условий в разных тегах 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

Ответы [ 2 ]

4 голосов
/ 06 мая 2010

Думаю, вам придется немного отредактировать свой вопрос, приведите пример.

Меньше циклов всегда лучший подход :) Лучше всего использовать меньшее преобразование, если в этом нет необходимости:)

Если ваши данные находятся в одном запросе, то нет необходимости повторять цикл более одного раза, я думаю ...

0 голосов
/ 22 декабря 2012

Лучший подход всегда будет зависеть от вашей конкретной проблемы.

Хотя меньшее количество итераций цикла всегда приводит к более высокой производительности, иногда может быть приемлемо пожертвовать некоторой производительностью ради улучшения читабельности.

Затраты на обслуживание, как правило, являются самой дорогой частью программного обеспечения, поэтому стоит сделать код легким для чтения.

В данном конкретном случае:

  • Если результат запроса getAttributes необычно велик (например, более 10000 строк) или эта страница загружается необычно часто (например, более один раз / сек), это, вероятно, не будет иметь заметного значения, сколько раз вы зацикливаетесь на этом.

  • В любом случае оба варианта будут занимать одинаковое количество времени: первый параметр дважды зацикливается на запросе. Второй параметр выполняет циклический просмотр запроса один раз, чтобы заполнить две структуры, затем код отображения циклически проходит по каждой из сгенерированных структур (в которых объединено столько же элементов, сколько в запросе строк), что приводит к одинаковому точному числу полных итераций эквивалентно getAttributes.recordcount*2).

  • Код, который разбивает результаты запроса на различные структуры, несколько необычен, что снижает читабельность и увеличивает затраты на обслуживание. Поскольку на самом деле он не улучшает производительность, он совершенно непродуктивен и не должен использоваться.

...