Новичок
- Статус
- Не в сети
- Рег
- 8 Окт 2026
- Посты
- 5
- Реакции
- 0
Проблема глубокой вложенности при отрисовке каталогов
Столкнулся на прошлой неделе с задачей: нужно было вывести дерево категорий с уровнем вложенности до 10 и общим количеством узлов около 5000. Классический рекурсивный подход на PHP начал «задыхаться» уже на 2000 объектов: генерация страницы занимала почти 1.8 секунды, а DOM-дерево весило как чугунный мост. Главная беда была в избыточности оберток для отступов.Главное правило при работе с тяжелыми структурами: перекладывай расчеты на БД, а визуализацию — на возможности современного браузера, избегая лишних узлов.
Бэкенд: Уходим от рекурсии в PHP
Вместо бесконечных вложенных циклов я использовал алгоритм Nested Set, но с небольшой модификацией. Для первичной выборки данных из MySQL лучше использовать один запрос с сортировкой по левому ключу. В самом PHP мы просто проходим по массиву один раз, формируя плоский список с метаданными о глубине. Для тех, кто хочет углубиться в математику таких выборок, рекомендую глянуть
Гости не видят ссылку
Войти или зарегистрироваться
по индексации иерархий.Фронтенд: CSS Grid против вложенных div
Раньше я делал отступы через padding-left или вложенные контейнеры. Это плохо для производительности. Сейчас применил CSS Grid, где уровень вложенности передается в custom property. Вот как это выглядит на практике:- Каждому элементу в PHP назначается переменная --level.
- Сетка настраивается так, чтобы колонки соответствовали уровням.
- Элемент занимает нужную позицию через grid-column-start.
- Уменьшение веса HTML на 40% за счет удаления вложенных оберток.
- Браузер отрисовывает такую страницу в 3 раза быстрее.
- Код остается читаемым и легко стилизуется под мобилки.
