Как настроить кеширование на сервере в Next.js

Для большинства приложений Next.js на App Hosting можно оставить настройки по умолчанию. Однако если в экземплярах возникают ошибки Memory limit exceeded, вам может потребоваться задать для параметра experimental.isrFlushToDisk: false значение, при котором кеш будет храниться в памяти, а экземпляры не будут перезапускаться.

По умолчанию Next.js кеширует страницы и данные, которые он обрабатывает во время выполнения, например страницы, созданные с помощью инкрементной статической регенерации (ISR), ответы обработчика маршрутов и результаты выборки. Они хранятся в памяти и записываются в файлы в каталоге .next приложения. Next.js не удаляет эти файлы.

На App Hosting приложение работает в Cloud Run, где файловая система находится в памяти. Файлы, записанные в нее, учитываются в памяти, выделенной для каждого экземпляра обслуживания (memoryMiB), пока экземпляр не будет отключен. Если приложение отображает много разных страниц во время выполнения, например динамические маршруты с параметрами, которые не генерируются во время сборки, экземпляры могут превысить лимит памяти и перезапуститься. Cloud Run регистрирует ошибку, например Memory limit of 512 MiB exceeded with 515 MiB used. Подробную информацию можно найти в Cloud Run документации по доступу к файловой системе.

Хранить кеш в памяти

Чтобы запретить Next.js записывать кеш в файловую систему, задайте для experimental.isrFlushToDisk значение false в файле next.config.js:

// @ts-check

/** @type {import('next').NextConfig} */
const nextConfig = {
  experimental: {
    isrFlushToDisk: false,
  },
};

module.exports = nextConfig;

Затем Next.js хранит кешированный контент только в памяти, до cacheMaxMemorySize (по умолчанию 50 МБ), и удаляет записи, которые использовались реже всего, когда кеш заполнен. У каждого экземпляра показа есть собственный кеш, который очищается при перезапуске экземпляра.

Создайте фиксацию с этими изменениями и добавьте ее в активную ветку. Затем дождитесь завершения развертывания App Hosting.