2015-09-08 44 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