前提:最近在做后台的時候,頁面加載太慢,故第一時間想到的自然是優化SQL, 優化后sql查詢速度從 2秒變成了零點幾秒, 以為就這麽完事了,然並卵,加載竟然花費30秒!
這麽慢,然后在代碼中分塊記錄它的耗時時間, 發現是在 foreach 遍歷的問題,嵌套數據量太大了, 我還嵌套了三層, 數據量大約為: 30*20000*20000;
額~ ~, 相乘起來數據量有點大了,怪不得會慢~
1、模擬場景, 優化前是這樣的:
for($i=0; $i<30; $i++){ for($j=0; $j<20000; $j++){ for($k=0; $k<20000; $k++){ if($j == $k){ // TODO
} } } }
2、 優化后:
for($i=0; $i<30; $i++){ $tempArr = array(); for($j=0; $j<20000; $j++){ $tempArr[$j] = $j; } for($k=0; $k<20000; $k++){
// isset 函數 if(isset($tempArr[$k])){ // TODO
} } // 用完即銷毀臨時數組
unset($tempArr); }
將最里面的數組放出來,就把遍歷數量拉低了, 再用 isset() 內置函數加快對比速度,效果是顯著的, 優化后變成了2秒內;