Я постараюсь быть максимально тщательным.
У меня есть приложение, написанное на PHP с использованием каркаса codeigniter.
На нескольких, но на одной конкретной странице у меня много информации, чтобы показать, поэтому я подумал, что было бы неплохо разделить все это на несколько вызовов Ajax. Так было, по крайней мере, последние 2 года, но в последнее время мои клиенты жалуются на проблемы со скоростью.
Я протестировал страницу и 6/10 раз она загружается без проблем.
На странице 6 вызовов ajax, как показано на рисунке, для выполнения большинства из них требуется менее 500 мс.
![enter image description here](https://i.stack.imgur.com/6nGmd.png)
Однако при примерно 4/10 перезагрузках страницы он зависает, в результате чего как минимум 2 вызова ajax завершаются в течение 5 секунд, иногда даже до 20 секунд.
![enter image description here](https://i.stack.imgur.com/AEPaD.png)
Вот фрагмент кода:
$('#table_booking_details').dataTable({
"autoWidth": false,
"responsive" : {
"details": false,
},
"ajax": {
"url" : "/admin/booking/dt_get_rental_date_times/",
"type" : "POST",
"data" : {
"rental_index" : $('#rental_index').val()
}
},
"serverSide" : true,
"processing" : true,
});
public function dt_get_rental_date_times()
{
$rental_index = $this->input->post('rental_index');
$search = $this->input->post('search');
$search_param = $search['value'];
$sort = $this->input->post('order');
$sort_column_index = $sort['0']['column'];
$sort_direction = $sort['0']['dir'];
$length = $this->input->post('length');
$start = $this->input->post('start');
$sort_column_array = array("0" => "collection_date_time", "1" => "return_date_time", "2" => "vehicle_registration", "3" => "(return_date_time - collection_date_time)", "4" => "rental_date_time_cost");
$sort_column = $sort_column_array[$sort_column_index];
$rental_date_times_result = $this->rentals_model->dt_get_rental_date_times($length, $start, $sort_column, $sort_direction, $search_param, $rental_index);
$rental_date_times = $rental_date_times_result['rows'];
$rental_date_times_count = $rental_date_times_result['num_rows'];
$data['recordsTotal'] = $rental_date_times_count;
$data['recordsFiltered'] = $rental_date_times_count;
$results = array();
$i = 0;
foreach ($rental_date_times as $rent)
{
$days = ceil(($rent->return_date_time - $rent->collection_date_time) / 60 / 60 / 24);
$actions = '';
if($rent->swapover == 1)
{
$actions = 'Yes';
}
else
{
$actions = 'No';
}
$results[] = array(
"DT_RowId" => "rentalperiod_" . $rent->rental_date_time_index,
"DT_RowClass" => 'linkable_row',
"0" => timestamp_to_date_time($rent->collection_date_time),
"1" => timestamp_to_date_time($rent->return_date_time),
"2" => $rent->vehicle_registration,
"3" => $days,
"4" => $rent->rental_date_time_cost,
"5" => $actions
);
}
$data['data'] = $results;
echo json_encode($data);
}
Во-первых, вероятно, это что-то новое, что люди только начинают замечать, кажется немного странным, что это просто случайно начало происходить.
Любые предложения, которые я могу сделать, чтобы улучшить его, не возвращая все обратно к старой школе php с перезагрузками страницы.
Спасибо