CodeShot

Static Site Generation (SSG) در مقابل Incremental Static Regeneration (ISR)

در SSG صفحات فقط یک‌بار در زمان Build ساخته می‌شوند و تا Deploy بعدی ثابت می‌مانند، در حالی که ISR اجازه می‌دهد صفحات استاتیک بعد از Build هم با یک بازه زمانی مشخص (revalidate) در پس‌زمینه به‌روزرسانی شوند بدون نیاز به Build کامل دوباره کل سایت.

ویژگیStatic Site Generation (SSG)Incremental Static Regeneration (ISR)
زمان ساخت صفحهفقط زمان BuildBuild + بازسازی دوره‌ای
نیاز به Deploy برای بروزرسانیبلهخیر
مناسب برایمحتوای ثابتمحتوای نسبتاً پویا

کِی از Static Site Generation (SSG) استفاده کنیم؟

وقتی محتوا کاملاً ثابت است (مثل صفحه درباره ما) و تغییرات فقط با Deploy جدید اتفاق می‌افتد.

کِی از Incremental Static Regeneration (ISR) استفاده کنیم؟

وقتی محتوا نسبتاً پویاست (مثل قیمت محصولات) اما نیازی به رندر آنی در هر درخواست ندارید و می‌خواهید همچنان از سرعت صفحات استاتیک بهره ببرید.

مثال Static Site Generation (SSG)

export async function getStaticProps() {
  return { props: { data: await fetchData() } };
}

مثال Incremental Static Regeneration (ISR)

export async function getStaticProps() {
  return {
    props: { data: await fetchData() },
    revalidate: 60, // هر ۶۰ ثانیه بازسازی می‌شود
  };
}

اشتباه رایج

اشتباه رایج استفاده از SSG خالص برای داده‌ای است که مکرراً تغییر می‌کند (مثل موجودی انبار)؛ کاربران تا Deploy بعدی داده قدیمی می‌بینند، در حالی که با یک تغییر کوچک (افزودن revalidate) همان صفحه با ISR به‌روز نگه داشته می‌شود.

جمع‌بندی

برای محتوای کاملاً ثابت از SSG و برای محتوای نسبتاً پویا که همچنان می‌خواهید سرعت صفحه استاتیک را حفظ کنید از ISR استفاده کنید.