【发布时间】:2016-08-02 18:38:26
【问题描述】:
当我在 google chrome 中尝试使用脚本 URL 时,该脚本运行非常缓慢,我想知道原因:
<?php
include 'config.php';
$conn = mysqli_connect($servername, $username, $password, $dbname);
$playerEmail = $_REQUEST["playerEmail"];
$sql = "SELECT *
FROM players
WHERE EMAIL = '$playerEmail'";
$res = mysqli_query($conn,$sql);
$result = array();
while($row = mysqli_fetch_array($res)){
array_push($result,
array('EMAIL'=>$row[0],
'DATEOFSIGNUP'=>$row[2],
'USERNAME'=>$row[3],
'GENDER'=>$row[4],
'JOB'=>$row[5],
'LVL'=>$row[6],
'HP_NOW'=>$row[7],
'HP_MAX'=>$row[8],
'MANA_NOW'=>$row[9],
'MANA_MAX'=>$row[10],
'STR'=>$row[11],
'SPD'=>$row[12],
'INTEL'=>$row[13],
'XP_NOW'=>$row[14],
'XP_NEEDED'=>$row[15],
'GOLDS'=>$row[16],
'NUMBERSOFITEMS'=>$row[17],
'LOCATION_X'=>$row[18],
'LOCATION_Y'=>$row[19]
));
}
echo json_encode(array("result"=>$result));
mysqli_close($conn);
?>
我所有的其他脚本都是使用 $_REQUEST 制作的,所以我不相信这是原因。任何你能想到的,随时在这里分享。
非常感谢大家!
【问题讨论】:
-
哪个部分运行缓慢?你做过基准测试吗?
-
您的查询返回大约多少行?
-
这似乎过于复杂了;为什么不直接从数据库中返回一个关联数组呢?如果你使用 PDO,你甚至可以使用
fetchAll来完全省去循环。 -
通过使用
select *,您可能会提取不必要的数据;仅仅因为您实际上没有使用它并不意味着它不会被发送。现在想象一下,如果有人稍后将玩家照片(作为 BLOB)直接添加到表中,这可能会慢得多。