0
我有一个循环内的循环,导致我的页面加载时间更长。有了更多的数据,加载时间可以达到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>
输入变化的频率如何变化?日常?如果是这样,不要在每个请求上都内联,而是设置一个计划任务来运行每个[[更改周期]](例如:每日)来执行处理,并将结果数据放入应用程序范围中,或者缓存等。 –
在代码中有四次'DeserializeJSON(cfhttp.fileContent)'。在第一次循环开始之前这样做会更有效率,并将其存储在一个新变量中。您目前在同一个字符串上多次执行相同的过程,这不是必需的。也注意到你的内部和外部循环都有'index =“我”'他们应该是不同的。 –
正如约翰指出的那样,最大的收获将是将'Deserialize'移到循环外部,然后将其变为1循环而不是2。您还将'ArrayAppend'的结果(它只是一个真/假)赋值给一个完全被忽略的变量。您可以通过切换到'来节省几个周期,但这只是比较小的。 –