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'的結果(它只是一個真/假)賦值給一個完全被忽略的變量。您可以通過切換到'來節省幾個週期,但這只是比較小的。 –