SSG, или как я повернул не туда



Я долго считал SSG манной небесной. Ну сами посудите — большая часть рантайма уже выполнена на этапе сборки. Осталось отдать пользователю статику с небольшими "островками интерактивности".



Получается максимально возможная производительность. Всё это можно раскидать по CDN, и получится прям вах вах.



Но за всё нужно платить...




Так как в моей голове прям плотно сформировалось: если можно сделать SSG, то лучше SSG,

я начал всё прям силком в рамки этого SSG затаскивать.



И тут для настоящего SSG адепта настаёт сложный момент:



— Все переменные окружения должны быть известны на этапе сборки (Теперь Docker image нельзя запустить в разном окружении. Ата-та от девопса)

— Доступ к продовой базе данных должен быть на этапе сборки (А тут уже ата-та от безопасников)

— А что делать с интернационализацией? Получается, что нужно делать сборку под все языки сразу. А как отдать пользователю нужный контент? Появляются всякие прикольные /ru в путях

— Нет возможности использовать заголовки, в том числе, куки на сервере. И это достаточно жёсткое ограничение, которое сильно связывает руки

— Большой гап между изменениями в контенте и тем, что увидят пользователи. + Автоматизация этого процесса – значительно более сложное занятие



Короче, в результате получается какое-то сражение с ветряными мельницами. И я это сражение успешно выигрывал постоянно.



Но какой ценой? Ценой значительного повышения ментальной сложности.



Вот и получается, что установку можно и нужно сформулировать наоборот.



Любой кэш – это сложно (помните 2 самые главные проблемы в программировании)



И любой кэш нужно добавлять после. Когда без него не обойтись.





Короче, это я к чему. Если вы разрабатываете новую приложуху. И у вас не будет мильёнов пользователей с релиза. Забейте на SSG и на кэши



Если пишете на Next.js

const dynamic = 'force-dynamic'


И погнали



Сэкономите время себе и бизнесу.



Но не воспринимайте мои слова буквально. Если вам нужен SSG, то вам нужен SSG. Но важно понимать, что SSG – это сложно