#laravel #time #view #laravel-blade #execution-time
Вопрос:
итак , я импортировал свой большой файл excel с огромной информацией за 1 секунду , и я получил всю информацию , которую мне нужно отобразить в течение 1 секунды, но у меня возникла большая проблема при отображении массива в представлении, потому что я проверяю, правильны ли ячейки или нет, я использую 5 ifs и 3 для каждого, и это занимает более 2 минут, мне нужна помощь, чтобы отобразить всю информацию за короткое время, это мой массив, и спасибо
и есть мой код представления, который занимает много времени для отображения информации
и спасибо
//here we get our final result of true and false fields
$finale_array = [];
// here we get all our
$current_table2 = [];
$results_applied = [];
$current_result = [];
$columns = SCHEMA::getColumnListing('imports');
// here we get all our conditions
$conditions = DB::table('conditions')->select('number', 'field', 'value')->get();
// here we get all our data
$imports = DB::table('imports')->get();
$results = DB::table('results')->get();
$x = 0;
$default_value = 0;
foreach ($imports as $key => $imported) {
$res = get_object_vars($imported);
foreach ($conditions as $value) {
$array = get_object_vars($value);
$result = $this->test($columns, $array['field']); // the result of our test function
if ($result == "ok") {
if ($res[$array['field']] == $array['value']) {
foreach ($results as $value_result) {
$res_resultat = get_object_vars($value_result);
$test_field = $this->test($columns, $res_resultat['field']);
// testing if the condtion numder match with the result number
if (($res_resultat['condition_number'] == $array['number'])) {
if (($test_field == 'ok')) {
if ($res['id'] != $default_value) {
// here test if the difference between the id and the default value is different from the current id to insert
if (($res['id'] - $default_value) != $res['id']) {
array_push($current_table2, $results_applied);
array_push($finale_array, $current_table2);
$current_table2 = [];
$results_applied = [];
$default_value = $res['id'];
}
$current_table2 = [$res, $res['id']];
}
$current_result = [$res_resultat['field'], $res[$res_resultat['field']]];
if ($res_resultat['value'] == $res[$res_resultat['field']]) {
$current_result[2] = 'true';
$current_result[3] = $res_resultat['value'];
} else {
$current_result[2] = 'false';
$current_result[3] = $res_resultat['value'];
}
$current_result[4] = $array['number'];
array_push($results_applied, $current_result);
}
}
}
}
}
}
$default_value = $res['id'];
}
array_push($current_table2, $results_applied);
array_push($finale_array, $current_table2);
dd($finale_array);
return view('Appliedconditions', ['imports' => $finale_array, 'columns' => $columns]);
}
Комментарии:
1. Пожалуйста, не публикуйте изображения кода. разместите код в блоке кода в своем вопросе, чтобы мы могли его скопировать.
Ответ №1:
Из того, что я вижу, вы восстанавливаете все данные без подкачки. Вы должны разбить данные на страницы, используя paginate(#elements_per_page)
директиву в своем запросе, где #elements_per_page
указано количество элементов, которые вы хотите отобразить на странице.
Например:
$elements = Elements::select('*')->paginate(10);
и в представлении блейда вы можете восстановить ссылки на страницы после закрывающего тега таблицы таким образом: {{ $elements->links() }}
Комментарии:
1. здесь я получаю всю строку импорта без разбиения на страницы, потому что я их фильтрую, я тестирую некоторые кодировки и я предоставляю информацию не из какого-либо запроса, я собираю информацию из запроса после их тестирования, а затем помещаю их в массив, который я буду отображать в представлении, я могу разбить массив результатов на страницы ?
2. @KhaledAbdelmoumen можете ли вы отредактировать свой вопрос с помощью своего кода? Я не понимаю, что вы имеете в виду, и я не могу вам помочь