У меня есть цикл внутри цикла, что приводит к увеличению времени загрузки моей страницы. При большем количестве данных время загрузки может увеличиться до 10 000 мс, что составляет около 10 секунд. Как я могу написать его для более быстрого времени загрузки? Код, который у меня есть до сих пор:Coldfusion Оптимизация вложенного цикла
<cfloop from="#endDate#" to="#startDate#" index="i" step="#CreateTimeSpan(+1,0,0,0)#">
<cfset loopdate = dateformat(i,'mmm dd')>
<!---Loop the number of likes for each day--->
<cfset daylike = 0>
<cfset dayretweet = 0>
<cfset tweetrec = now()>
<cfloop from = 1 to = #arraylen(DeserializeJSON(cfhttp.fileContent))# index = "i">
<cfset tweetrec = dateformat(DeserializeJSON(cfhttp.fileContent)[i].created_at,'mmm dd')>
<cfif tweetrec IS loopdate>
<cfset daylike = daylike + DeserializeJSON(cfhttp.fileContent)[i].favorite_count>
<cfset dayretweet = dayretweet + DeserializeJSON(cfhttp.fileContent)[i].retweet_count>
</cfif>
</cfloop>
<!---add the favourites to array--->
<cfset myarray = ArrayAppend(likes, "#daylike#")>
<!--- Append dates to dates array --->
<cfset myarray = ArrayAppend(dates, "#loopdate#")>
<!---Append retweets to retweets array --->
<cfset myarray = ArrayAppend(retweetarr, "#dayretweet#")>
</cfloop>
Как часто изменяются изменения ввода? Ежедневно? Если так, не делайте это inline для каждого запроса, а вместо этого настраивайте запланированную задачу для запуска каждого '[периода изменения]' (например, ежедневно) для выполнения обработки и размещения результирующих данных в области приложения или кеш или тому подобное. –
У вас есть 'DeserializeJSON (cfhttp.fileContent)' четыре раза в вашем коде. Было бы гораздо эффективнее сделать это один раз до начала первого цикла и сохранить его в новой переменной. В настоящее время вы выполняете один и тот же процесс несколько раз в той же строке, которая не требуется. Также заметили, что ваши внутренние и внешние циклы имеют 'index =" i "' они должны быть разными. –
Как отметил Джон, наибольшая прибыль будет заключаться в том, чтобы переместить 'Deserialize' за пределы цикла, а затем превратить это в 1 цикл вместо 2. Вы также назначаете результат' ArrayAppend' (который является только истиной/ложью) для переменную, которая полностью игнорируется. Вы можете сохранить несколько циклов, переключившись на '