Новичок
- Статус
- Не в сети
- Рег
- 7 Окт 2026
- Посты
- 3
- Реакции
- 0
Как я ускорил отрисовку каталога на 15000 позиций без пагинации
Недавно столкнулся с задачей: заказчик категорически отказался от стандартной пагинации в админке, требуя «бесконечный» список с мгновенным поиском. Проблема в том, что стандартный вывод через циклы в PHP при таком объеме данных выжирает память, а браузер начинает задыхаться при отрисовке DOM. Расскажу, как я решил это связкой оптимизированного бэкенда и современной верстки.Сначала по бэкенду. Вместо того чтобы тянуть всё через ORM, я перешел на чистый SQL с использованием Generator в PHP. Это позволило итерировать записи, не загружая весь массив в RAM. Для фильтрации по нескольким полям я внедрил простой, но эффективный префиксный поиск. Детали реализации этого подхода можно найти в архиве моих заметок, где естьГлавное правило при работе с тяжелыми интерфейсами: не заставляйте браузер считать геометрию каждого элемента, если он находится вне зоны видимости.
Гости не видят ссылку
Войти или зарегистрироваться
логики работы с буферизацией вывода.Фронтенд-магия через CSS Grid
Чтобы избежать «тормозов» при прокрутке, я отказался от Flexbox в пользу Grid. Основные профиты:- Браузер быстрее просчитывает сетку, так как она жестко задана.
- Использование
content-visibility: auto;позволяет пропускать рендеринг блоков, которые еще не доскроллены. - Минимальное количество вложенных тегов снижает нагрузку на дерево DOM.
- Подготовка SQL-индекса по полям поиска для ускорения выборки до 15-20мс.
- Реализация PHP-контроллера, который отдает данные чанками через StreamedResponse.
- Настройка CSS-контейнера с фиксированным
grid-template-columns, чтобы избежать пересчета layout при добавлении новых строк.
