Configurer la mise en cache du serveur sur Next.js

La plupart des applications Next.js sur App Hosting peuvent conserver les valeurs par défaut de Next.js. Toutefois, si vos instances rencontrent des erreurs Memory limit exceeded, vous devrez peut-être définir experimental.isrFlushToDisk: false pour conserver le cache en mémoire et empêcher le redémarrage des instances.

Par défaut, Next.js met en cache les pages et les données qu'il affiche au moment de l'exécution, telles que les pages générées avec la régénération statique incrémentielle (ISR), les réponses du gestionnaire de routage et les résultats de récupération. Il les conserve en mémoire et les écrit également dans des fichiers du répertoire .next de votre application. Next.js ne supprime pas ces fichiers.

Sur App Hosting, votre application s'exécute sur Cloud Run, où le système de fichiers est en mémoire. Les fichiers qui y sont écrits sont comptabilisés dans l'allocation de mémoire allouée à chaque instance de diffusion (memoryMiB) jusqu'à l'arrêt de l'instance. Si votre application affiche de nombreuses pages distinctes au moment de l'exécution, par exemple des routes dynamiques avec des paramètres qui ne sont pas générés au moment de la compilation, les instances peuvent dépasser leur limite de mémoire et redémarrer. Cloud Run consigne ensuite une erreur telle que Memory limit of 512 MiB exceeded with 515 MiB used. Pour en savoir plus, consultez la documentation Cloud Run sur l'accès au système de fichiers.

Conserver le cache en mémoire

Pour empêcher Next.js d'écrire son cache dans le système de fichiers, définissez experimental.isrFlushToDisk sur false dans votre fichier next.config.js :

// @ts-check

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

module.exports = nextConfig;

Next.js ne conserve alors le contenu mis en cache qu'en mémoire, jusqu'à cacheMaxMemorySize (50 Mo par défaut), et supprime les entrées les moins récemment utilisées lorsque le cache est plein. Chaque instance de diffusion possède son propre cache, qui est perdu lors du redémarrage de l'instance.

Créez un commit incluant ces modifications et envoyez-le dans votre branche active. Attendez ensuite que le déploiement de App Hosting soit terminé.