กำหนดค่าการแคชฝั่งเซิร์ฟเวอร์ใน Next.js

แอป Next.js ส่วนใหญ่ใน App Hosting สามารถใช้ค่าเริ่มต้นของ Next.js ตามปกติได้ อย่างไรก็ตาม หากอินสแตนซ์พบข้อผิดพลาด Memory limit exceeded คุณอาจต้องตั้งค่า experimental.isrFlushToDisk: false เพื่อเก็บแคชไว้ในหน่วยความจำและป้องกันไม่ให้อินสแตนซ์รีสตาร์ท

โดยค่าเริ่มต้น Next.js จะแคชหน้าเว็บและข้อมูลที่แสดงผลที่รันไทม์ เช่น หน้าเว็บที่สร้างด้วย Incremental Static Regeneration (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 MB) และนำรายการที่ใช้ล่าสุดออกเมื่อแคชเต็ม อินสแตนซ์การแสดงผลแต่ละรายการมีแคชของตัวเอง ซึ่งจะหายไปเมื่ออินสแตนซ์รีสตาร์ท

สร้างคอมมิตที่มีการเปลี่ยนแปลงเหล่านี้และพุชไปยังสาขาที่ใช้งานอยู่ จากนั้นรอให้การเปิดตัว App Hosting เสร็จสมบูรณ์