Есть юзабилити проблемы, которые возникают от предоставления 40,000 пунктов поэтому многие сайты используют нумерацию страниц и/или AJAX бесконечной прокрутки как уже упоминалось.
При этом рендеринг 40 000 элементов с использованием PHP отлично подходит для браузера. Тем не менее, для достижения этой цели есть соображения, которые вы хотите предпринять при рендеринге многих элементов, включая память PHP, время отклика и т. Д., Которые вступают в игру.
Помимо рендеринга, поскольку ваша цель состоит в том, чтобы сделать эту возможность поиска, проблема может быть связана с производительностью кода поиска на стороне клиента, которая должна загружать все данные в структуру данных, пригодную для поиска. Более эффективный подход состоял бы в том, чтобы взять параметры поиска в браузере и запустить поиск на стороне сервера с вашей базой данных, чтобы представить результаты сопоставления.
Вот некоторые предложения:
Использование итератор
Первое, что нужно избегать загружается, что многие элементы в памяти, например, путем создания массива многих элементов. Гораздо лучше получить итератор и цикл, чтобы ограничить использование памяти.
Например:
# Slow and consumes a lot of memory
$products = array();
for ($i=1; $i<=40000; $i++) {
array_push($products, ['id' => $i,'name'=>'foobar']);
}
# Very fast and works fine on Chrome, Firefox, Safari
<table>
<?php for ($i; $i<=40000; $i++) { ?>
<tr>
<td><input type="checkbox" /></td>
<td><?= $i; ?></td>
<td><?= 'foobar'; ?></td>
</tr>
<?php } ?>
</table>
При использовании базы данных, вы можете сделать каждый элемент в то время как ниже. Также важно убедиться, что сам запрос выполняется быстро.
<table>
<?php while($row = $stmt->fetch(PDO::FETCH_ASSOC)) { ?>
<tr>
<td><input type="checkbox" /></td>
<td><?= $row['id']; ?></td>
<td><?= $row['name']; ?></td>
</tr>
<?php } ?>
</table>
Структуры Использование Lightweight данных
Вторая вещь, чтобы рассмотреть делает обработку каждого элемента, как легкий, как это возможно. Если у вас сложный элемент, вам нужно создать экземпляр объекта для каждого элемента. Если у вас есть простой объект, вы можете использовать массив или ассоциативный массив.
стороне сервера Поиск по сравнению с Client-Side Поиск
Для поиска, что многие результаты с помощью JavaScript/JQuery на клиенте может быть проблема, как хорошо. Для достижения этого большого количества результатов было бы более эффективным использовать поисковые входы из браузера для выполнения поиска на стороне сервера с использованием запроса базы данных (с правильной индексацией) и просто вернуть соответствующие элементы.
Рассматривали ли вы разбивку на страницы? –
Paginate it. Браузер будет сбой, если вы этого не сделаете. – Andrew
Я не думаю, что html-таблица с 40 000 строк слишком много для браузера. Это может быть немного медленнее прокрутки, но определенно не должно терпеть крах. Какие браузеры вы пытались? – Marki555