我的应用程序的逻辑是在每个API请求中从数据库中获取所有数据。原因是数据库中存储的数据格式。
这就是我将数据存储到关联数组中的方法,它完全正常。
sendMessage
共有505条记录进入数组。对于GET请求,if(mysqli_num_rows($resultAllBookings) > 0){
while($row = mysqli_fetch_assoc($resultAllBookings)){
if(preg_match($bamsFormatRegex, $row['booking_name'])){
$piecesOfBams = explode('/', $row['booking_name']);
$pdgName = strtoupper($piecesOfBams[0]);
$teamName = strtoupper($piecesOfBams[3]);
$deploymentNumber = $piecesOfBams[1];
#~#
if(!array_key_exists($pdgName, $selectBoxArray)){
$selectBoxArray[$pdgName] = Array();
}
if(!array_key_exists($teamName, $selectBoxArray[$pdgName])){
$selectBoxArray[$pdgName][$teamName] = Array();
}
array_push($selectBoxArray[$pdgName][$teamName], Array(
'name' => $deploymentNumber,
'value' => $deploymentNumber,
'title' => $deploymentNumber,
));
#~#
array_push($allBookingsData, array(
'booking_name' => $row['booking_name'],
'asset_count' => $row['booking_asset_count'],
'PDG' => $pdgName,
'Deployment_Number' => $deploymentNumber,
'SPoC' => $piecesOfBams[2],
'Team_Name' => $teamName,
'Release' => $piecesOfBams[4]
));
}else{
$pdgName = 'INVALID';
$teamName = 'INVALID';
$deploymentNumber = 'INVALID';
#~#
if(!array_key_exists($pdgName, $selectBoxArray)){
$selectBoxArray[$pdgName] = Array();
}
if(!array_key_exists($teamName, $selectBoxArray[$pdgName])){
$selectBoxArray[$pdgName][$teamName] = Array();
}
array_push($selectBoxArray[$pdgName][$teamName], Array(
'name' => $deploymentNumber,
'value' => $deploymentNumber,
'title' => $deploymentNumber,
));
array_push($allBookingsData, array(
'booking_name' => $row['booking_name'],
'asset_count' => $row['booking_asset_count'],
'PDG' => 'INVALID',
'Deployment_Number' => 'INVALID',
'SPoC' => 'INVALID',
'Team_Name' => 'INVALID',
'Release' => 'INVALID'
));
}
}
}
数组按原样返回并绑定到页面上的表。工作正常。
现在问题在于当用户在页面上进行选择时使用POST请求。 以下是POST请求中传递的一个此类字段的示例。
allBookingsData
这里我正在搜索具有特定PDG的记录到if($_POST){
$tableData = Array();
foreach ($allBookingsData as $key => $value) {
if($value['PDG'] == $filterData['PDG']){
array_push($tableData, Array(
'booking_name' => $value['booking_name'],
'asset_count' => $value['asset_count'],
'PDG' => $value['PDG'],
'Deployment_Number' => $value['Deployment_Number'],
'SPoC' => $value['SPoC'],
'Team_Name' => $value['Team_Name'],
'Release' => $value['Release']
));
}
}
}else{
$tableData = $allBookingsData;
}
数组中。
现在这需要将近12秒的时间来完成请求并将数据绑定到页面。
数组中只有505条记录。我无法弄清楚为什么搜索数组需要花费很多时间。
更新
尝试使用allBookingsData
,但响应时间没有变化。完成请求仍需要11-12秒。并且服务器没有超载。
array_filter
function searchByPDG($passedRecord){
error_log('### searchByPDG ###');
global $filterData;
return ($passedRecord['PDG'] == $filterData['PDG']);
}
$tableData = array_filter($allBookingsData, "searchByPDG");
的示例记录:
allBookingsData
更新-2:
我检查了第一个和第二个代码块的执行时间。它分别是1.0050439834595和1.0006971359253微秒。但返回并绑定数据需要11-12秒。我附上了开发者工具的截图。
如何优化此代码?