Зацикливаясь на Cfquery или Struct?

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

Решение

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

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

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

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

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

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

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

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

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

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

Другие вопросы по тегам