Запрос списка больше не грузит статью
Новости, заметки и кейсы хранят три HTML-тела в JSON. Сетке нужны заголовки и анонсы. Статья ей не нужна.
Каждая новость держит title, excerpt и body как JSON с en, ru и de. Публичный список брал строку целиком. Пятьдесят статей тащили около 1.2 МБ HTML в InnoDB buffer pool. JSON API большую часть выбрасывал до выхода из PHP. Сетка body не печатала.
Запрос списка теперь просит id, категорию, title, excerpt, image, size, даты и sort. Body остаётся на запросе деталки. Тот же разрез сел на заметки и кейсы. Один шаблон, три ресурса.
Индекс
Публичные списки фильтруют is_published и сортируют по sort_order или published_at. Один составной индекс закрывает это в правильном порядке колонок. Два индекса, которые дублировали ведущие колонки, сняли. Они стоили записи и ничего не давали.
План надо смотреть на продовом объёме. На маленькой seed-таблице MySQL выбирает скан и всё выглядит здорово. Переключение на полный скан это число строк, не догадка в разработке.
Чего Vue SSR перестал ждать
SSR сетки больше не ждёт блоб, который никогда не печатает. Детальные страницы не замедлились так, чтобы это было видно. Если замедлятся, это единственный запрос, который стоит кэшировать, по id, с TTL, который умирает при сохранении в админке.
JSON это формат админки. Путь списка читает короткую строку. Путь статьи читает body. Смешивать их было удобно и дорого.
