从MySQL检索数据到React Native时获取速度慢

时间:2018-08-16 22:49:23

标签: php mysql reactjs react-native fetch

我不确定是什么原因导致读取速度如此之慢。可能是React Native的获取,还是我的查询设置方式?

这是我对React Native的获取:

    forceUpdateHandler(){
  fetch(`https://www.example.com/React/user-profile.php?username=${this.state.username}` , {
  method: 'GET',
  headers: {
    'Accept': 'application/json',
    'Content-Type': 'application/json',
  }

 })
   .then((response) => response.json())
   .then((responseJson) => {
     this.setState({
       isLoading: false,
       dataSource: responseJson,
       user_image:  responseJson[0].user_images.map(item => ({ ...item, progress: new Animated.Value(0), unprogress: new Animated.Value(1) })),
       },function() {


       });
   })
   .catch((error) => {
     //console.error(error);
   });
}

这是我对mysql的PHP查询:

 if ($conn->connect_error) {

 die("Connection failed: " . $conn->connect_error);
} 
 // Getting the received JSON into $json variable.
 $json = file_get_contents('php://input');

 // decoding the received JSON and store into $obj variable.
 $obj = json_decode($json,true);

// Populate Username from JSON $obj array and store into $username.
$username = $_GET['username'];

$result = mysqli_query($conn, "SELECT * FROM users WHERE username='$username'");
$fetch = mysqli_query($conn, "SELECT id, images, note, date FROM user_images WHERE username='$username' ORDER BY date DESC"); 

// I think, you'll get a single row, so no need to loop
$json = mysqli_fetch_array($result, MYSQL_ASSOC);

$json2 = array();
while ($row = mysqli_fetch_assoc($fetch)){
    //Our YYYY-MM-DD date.
    $ymd = $row['date'];

    //Convert it into a timestamp.
    $timestamp = strtotime($ymd);

    //Convert it to DD-MM-YYYY
    $dmy = date("m/d/Y", $timestamp);
    $json2[] = array(
        'id' => $row["id"],
        'images' => $row["images"],
        'note' => $row["note"],
        'date' => $dmy,

    );
}
$json['user_images'] = $json2;
echo json_encode(array($json));
$conn->close();

此数据只有5列数据,但是当我将其限制为1时,react native会快速获取数据。有没有一种方法可以在我仍然拥有所有数据结果的同时加快获取速度?

1 个答案:

答案 0 :(得分:0)

  1. 您应该在users表的username列上具有唯一索引。您也可以假设只有一行会返回。而且它也会更快,因为MySQL在找到一条记录时会返回。
  2. (我没有注意到MyISAM上有OP。)看来您的表已被删除,并且您正在使用用户名进行查询。如果更改用户名怎么办?您会更新user_images表吗?
  3. 您的user_images表应该具有一个auto_increment主键,以便您的order by可以按id desc而不是日期进行排序。您可以在用户名上有一个索引,但这还取决于您对where语句的选择性。如果用户名的基数非常低,则MySQL将选择全表扫描。
  4. 您还应该尝试通过一个查询(联接)而不是两个查询来获取数据。
  5. 您应使用准备好的语句来防止SQL注入。您的代码现在容易受到攻击。