Nextjs 15



Вышел новый мажор Next.js с, наверное, самым важным для меня изменением с момента релиза AppRouter. А именно –отменой кэширования по умолчанию



Почему это для меня так важно? Потому что это бесконечный источник багов



Есть такое выражение: "В программировании 2 самые большие проблемы – наименование переменных и инвалидация кэша"



И если это звучит, как шутка, то на самом деле это, действительно, 2 самые серьёзные проблемы.



Любой кэш – необходимое зло.



Кэш — это осознанное нарушение DRY, когда мы создаём дублирование состояния для экономии вычислительных ресурсов.



Но любое дублирование состояния — это проблема. Так как везде, где есть дублирование, есть и рассинхронизация.

Хоть на доли секунды, но между источником истины и кэшом есть время, когда они не совпадают. А это по умолчанию баг!



Представьте себе, любой кэш — это вечный источник багов с разной степенью критичности и влияния на работу приложения



Кэш – это сложно. Особенно такой кэш, который сделали в Next.js, где он ровным слоем размазан по всему приложению.

Каждый сегмент имеет свой кэш, каждый вызов fetch имеет свой кэш.



Представьте себе обычного разработчика, который начинает осваивать Next.js и просто не понимает, почему у него постоянно показывается старая страница, fetch возвращает старый результат.

После мутации вообще хрен заставишь Next.js показать новые значения. И даже, если ты явно указал, что и как инвалидировать, в какой-то момент инвалидация может не успеть пройти, и пользователь увидит старое значение, которое он только что поменял



Но, повторюсь ещё раз, кэш – необходимое зло. Мы ограничены в вычислительных мощностях, и нам нужно кэшировать, чтобы работало быстро.



Но кэш нужен не всегда! А если он нужен, то включать его требуется очень аккуратно и с полным пониманием дела.



А как до этого было с next.js? Бля, опять ничего не работает. Пойду курить и пробовать всякие магические строчки из документации.



Крайне ужасная ситуация. Ребята это тоже поняли и, наконец, исправили



Слава богу, теперь у нас next.js — это просто php)



На каждый запрос будет выполняться всё. Всё понятно и предсказуемо. А если окажется, что у тебя много пользователей, и ресурсы больно дорогие. Ну изволь сам руками добавить кэш



Кто знает, может теперь Next.js не будет вызывать такого отторжения)