php 大數組 foreach 循環嵌套的性能優化


前提:最近在做后台的時候,頁面加載太慢,故第一時間想到的自然是優化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秒內;


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM