ברוב האפליקציות של Next.js ב-App Hosting אפשר להשאיר את ברירות המחדל הרגילות של Next.js.
עם זאת, אם במכונות שלכם מופיעות שגיאות Memory limit exceeded, יכול להיות שתצטרכו להגדיר את experimental.isrFlushToDisk: false כדי לשמור את המטמון בזיכרון ולמנוע הפעלה מחדש של המכונות.
כברירת מחדל, Next.js שומר במטמון את הדפים והנתונים שהוא מעבד בזמן הריצה, כמו דפים שנוצרו באמצעות Incremental Static Regeneration (ISR), תגובות של handler של מסלולים ותוצאות של אחזור. היא שומרת אותם בזיכרון וגם כותבת אותם לקבצים בספרייה .next של האפליקציה. Next.js לא מסיר את הקבצים האלה.
ב-App Hosting, האפליקציה פועלת ב-Cloud Run, שבה מערכת הקבצים נמצאת בזיכרון. קבצים שנכתבים אליו נכללים בהקצאת הזיכרון שמוקצה לכל מכונה שמטפלת בבקשות (memoryMiB) עד שהמכונה מושבתת. אם האפליקציה מעבדת הרבה דפים נפרדים בזמן הריצה, למשל נתיבים דינמיים עם פרמטרים שלא נוצרים בזמן ה-build, המכונות יכולות לחרוג ממגבלת הזיכרון שלהן ולהתחיל מחדש. 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 (ברירת המחדל היא 50MB), ומסיר את הרשומות שהיו בשימוש הכי פחות לאחרונה כשהמטמון מלא. לכל מכונה להצגת מודעות יש מטמון משלה, שנמחק כשהמכונה מופעלת מחדש.
יוצרים קובץ commit שכולל את השינויים האלה ודוחפים אותו להסתעפות הפעילה. לאחר מכן, צריך להמתין עד שההשקה של App Hosting תסתיים.