2015-09-08 73 views
1

當前數據是以PHP腳本的數組形式提取的。所以我發現,對於40組數據,大約需要20秒才能加載。我想這是因爲阿賈克斯必須等到收集到所有結果。如果數據集增加到數百,我認爲它會播種很慢。如何加載通過ajax獲取的數據更快?

所以我做了一些研究,如何減少加載時間,因此遇到並行ajax請求。我認爲這會對多個請求有所幫助。對於單個請求,但是成千上萬的數據被抓取,有沒有辦法提高速度?

JS:

$(function() { 
    $.ajax({ 
     dataType: "json", 
     url: 'showAllTutor.php', 
     success: function(data) { 
      console.log(data.length); 
      var j=0; 
      for (i = 0; i < data.length; i++) { 
       j++; 
       console.log(data[i].name); 
      } 
     } 
    }); 
}); 

PHP:

$sql="SELECT * FROM userinfo,posts WHERE userinfo.UUID = posts.UUID AND posts.p_id > '$last_msg_id'"; 
     $stmt =connection::$pdo->prepare($sql); 
     $stmt->execute(); 
     $json=array(); 

     while($row = $stmt->fetch()) { 
      $total = $row['reviewPlus']+ $row['reviewNeg']; 
      array_push($json,array("name"=>$row['name'],"subject"=>$row['subname'],"subid"=>$row['subID'],"rate"=>$row['pricing'],"dateposted"=>$row['datePosted'],"location"=>$row['location'],"contact"=>$row['phone'],"morning"=>$row['morning'],"afternoon"=>$row['afternoon'],"evening"=>$row['evening'],"postId"=>$row['p_id'],"total"=>$total,"plus"=>$row['reviewPlus'],"user"=>$row['UUID']));     
     }  
    }  
    echo json_encode($json); 
+3

你需要分析你的代碼來找出瓶頸在哪裏。我想你有一個沒有足夠的索引的數據庫,但這是猜測,這是一個非常廣泛的話題。 – Quentin

+0

@Quentin,是的,我沒有在我的數據庫中使用索引原因,恐怕索引會減慢寫入數據庫的速度? – 112233

+1

@Vani對索引添加的寫入的影響與您在讀取時獲得的性能增強相比毫無意義(影響實際上什麼都沒有!)。經驗法則是在「where」子句的每一列上添加一個索引 – Qualcuno

回答

2

加載時間可能是因爲在你的代碼的多個循環,而這增加了循環在PHP和循環中的jQuery執行時間,

我建議你避免while循環在你的php代碼集合T使用使用fetchall聲明

$data = $stmt->fetchAll(PDO::FETCH_ASSOC); 
echo json_encode($data); 

,並在你的jQuery $total計算循環,

這可能幫助,快樂編碼的所有數據。

+0

你的權利。此外,將盡可能多的php邏輯移至sql語句中。例如你的總計算。這樣,結合keviveks的方法,你可以刪除你的循環,只是返回你的結果,而不循環它,並推動行到一個新的數組。 – DTH

+0

@DTH恭喜upvote更明顯:) – keviveks

+0

您的權利..已完成 – DTH