Спасибо за вопрос! В Next.js 15 генерация sitemap.xml может быть сложной, особенно если у вас есть динамические страницы, создаваемые по query‑параметрам. Однако, есть несколько способов это реализовать:
1️⃣ Разделение на статические и динамические страницы
Статические страницы (/about, /contact, /privacy) можно вручную добавить в sitemap.
2️⃣ Использование generateStaticParams (если маршруты известны заранее)
Если у вас есть предсказуемые динамические маршруты (/blog/[slug]), можно автоматически получить их во время билда:
Мы смогли реализовать много крутых решений благодаря возможностям Next.js и его отличной совместимости с Vercel, особенно с Edge Functions. Это дало нам кучу гибкости и помогло выжать максимум из технологий.
UPD: Также Next.js 15 предоставляет гибридный SSR/ISR/SSG, мощное кеширование через CDN и Redis, отличную поддержку TypeScript, а его интеграция с Gravity UI позволила адаптировать UI под серверный рендеринг. Всё это сделало его идеальным выбором для Hikasami.
Например чистый React: 1. Отсутствие SSR 2. Нет встроенного кеширования
Или возьмем тот же VueJS: 1. ISR не реализован. Он реализован только в NuxtJS (Но наша команда никогда не писала на NuxtJS и вряд ли когда то будет) 2. У Vue довольно слабая экосистема. (Vercel, Cloudflare)
Пока встроенного пула в приложении (pgxpool) достаточно, а добавление pgBouncer лишь усложнит систему без ощутимой выгоды. Но если нагрузка возрастёт и появится узкое место в соединениях с БД, то конечно, рассмотрим его внедрение.
Согласен, при масштабировании на сотни процессов без pgBouncer не обойтись. Однако его необходимость зависит от реальной нагрузки и архитектуры. Пока встроенного пула в приложении (pgxpool) достаточно, а добавление pgBouncer лишь усложнит систему без ощутимой выгоды. Но если нагрузка возрастёт и появится узкое место в соединениях с БД, то конечно, рассмотрим его внедрение
pgBouncer хорош для масштабирования и уменьшения нагрузки на PostgreSQL, но в нашем случае он не нужен. В приложении уже есть встроенный connection pool (pgxpool в Go), который решает основную проблему — уменьшает накладные расходы на установку соединений. Если всё равно приходится использовать connection pool в приложении, добавление pgBouncer только усложнит архитектуру без значительного выигрыша.
Спасибо за вопрос! В Next.js 15 генерация sitemap.xml может быть сложной, особенно если у вас есть динамические страницы, создаваемые по query‑параметрам. Однако, есть несколько способов это реализовать:
1️⃣ Разделение на статические и динамические страницы
Статические страницы (/about, /contact, /privacy) можно вручную добавить в sitemap.
2️⃣ Использование generateStaticParams (если маршруты известны заранее)
Если у вас есть предсказуемые динамические маршруты (/blog/[slug]), можно автоматически получить их во время билда:
Это отлично работает для предварительно известных маршрутов, но не поможет с query‑параметрами.
3️⃣ Генерация sitemap без БД и API (автоматическое сканирование файлов)
Если маршруты заранее неизвестны, можно автоматически сканировать папку app/, чтобы получить все страницы:
app/sitemap/route.ts
4️⃣ Получение sitemap через API (если маршруты хранятся в базе данных)
Если страницы создаются динамически по API, можно получать их так:
📌 app/sitemap/route.ts (получение через API)
В чем разница?
generateStaticParams работает только для известных на этапе билда маршрутов (используется в page.tsx).
Сканирование файловой системы (как в коде выше) автоматически добавляет страницы без запроса к БД.
Запрос к API → позволяет обновлять sitemap динамически для контента из базы данных.
Итог
Статические страницы → добавляем вручную.
Динамические страницы с slug → используем generateStaticParams.
Динамические страницы с API → запрашиваем маршруты через fetch.
P.S. Надеюсь, все правильно расписал, только что вернулся домой. Если что-то упустил — буду рад обсудить!
Редактировано: телепортировал сообщение не по адресу.
Не совсем.
Мы смогли реализовать много крутых решений благодаря возможностям Next.js и его отличной совместимости с Vercel, особенно с Edge Functions. Это дало нам кучу гибкости и помогло выжать максимум из технологий.
UPD: Также Next.js 15 предоставляет гибридный SSR/ISR/SSG, мощное кеширование через CDN и Redis, отличную поддержку TypeScript, а его интеграция с Gravity UI позволила адаптировать UI под серверный рендеринг. Всё это сделало его идеальным выбором для Hikasami.
Например чистый React:
1. Отсутствие SSR
2. Нет встроенного кеширования
Или возьмем тот же VueJS:
1. ISR не реализован. Он реализован только в NuxtJS (Но наша команда никогда не писала на NuxtJS и вряд ли когда то будет)
2. У Vue довольно слабая экосистема. (Vercel, Cloudflare)
Согласен, при масштабировании на сотни процессов без pgBouncer не обойтись. Однако его необходимость зависит от реальной нагрузки и архитектуры. Пока встроенного пула в приложении (pgxpool) достаточно, а добавление pgBouncer лишь усложнит систему без ощутимой выгоды. Но если нагрузка возрастёт и появится узкое место в соединениях с БД, то конечно, рассмотрим его внедрение
pgBouncer хорош для масштабирования и уменьшения нагрузки на PostgreSQL, но в нашем случае он не нужен. В приложении уже есть встроенный connection pool (pgxpool в Go), который решает основную проблему — уменьшает накладные расходы на установку соединений. Если всё равно приходится использовать connection pool в приложении, добавление pgBouncer только усложнит архитектуру без значительного выигрыша.