From 1733d46d12ff79a24a0d12de8a593095d354ff0d Mon Sep 17 00:00:00 2001 From: Ali Najmabadi Date: Sun, 8 Dec 2024 16:51:28 +0330 Subject: [PATCH] docs: update nextjs/isr --- src/pages/paas/nextjs/how-tos/use-isr.mdx | 92 ++++++++++++++++++++++- 1 file changed, 91 insertions(+), 1 deletion(-) diff --git a/src/pages/paas/nextjs/how-tos/use-isr.mdx b/src/pages/paas/nextjs/how-tos/use-isr.mdx index d26c4801..87654e6d 100644 --- a/src/pages/paas/nextjs/how-tos/use-isr.mdx +++ b/src/pages/paas/nextjs/how-tos/use-isr.mdx @@ -22,10 +22,100 @@ import Head from "next/head"; # استفاده از قابلیت ISR
-ISR (Incremental Static Regeneration) یکی از قابلیت‌های NextJS است که به شما اجازه می‌دهد تا صفحاتی را که به‌صورت استاتیک تولید شده‌اند، بدون نیاز به بازسازی کامل سایت، به‌روز کنید. +ISR یا Incremental Static Regeneration یک ویژگی در NextJS است که به شما اجازه می‌دهد تا صفحات استاتیک را به صورت انتخابی و بدون نیاز به بازسازی کل سایت، به‌روزرسانی کنید. + این قابلیت ترکیبی از مزایای Static Site Generation (SSG) و انعطاف‌پذیری Server-Side Rendering (SSR) را ارائه می‌دهد. +در واقع، عملکرد ISR به شکل زیر است: +
+ +
+ +همانطور که گفته شد، ISR امکان به‌روزرسانی صفحات استاتیک به‌صورت انتخابی و بدون نیاز به بازسازی کل سایت را فراهم می‌کند. این کار با استفاده از یک ویژگی کلیدی به نام revalidate در متد getStaticProps انجام می‌شود. مقدار revalidate تعیین می‌کند که یک صفحه استاتیک چه زمانی نیاز به بازسازی در پس‌زمینه دارد. زمانی که کاربران از صفحه‌ای بازدید می‌کنند، اگر زمان تعیین‌شده در revalidate گذشته باشد، یک نسخه جدید از صفحه ساخته می‌شود، در حالی که کاربران همچنان نسخه قدیمی را مشاهده می‌کنند. + +در این فرآیند، NextJS از کش (Cache) برای ارائه سریع نسخه موجود صفحه استفاده می‌کند. این باعث می‌شود تا کاربران تجربه سریعی داشته باشند، حتی اگر داده‌های صفحه در حال به‌روزرسانی باشد. هنگامی که فرآیند بازسازی کامل شد، نسخه جدید جایگزین نسخه قدیمی می‌شود و برای درخواست‌های بعدی ارائه خواهد شد. این ویژگی برای وب‌سایت‌هایی که شامل محتوای متغیر یا صفحات زیادی هستند، مانند فروشگاه‌های آنلاین یا سایت‌های خبری، بسیار ایده‌آل است. + +
+مثال زیر نحوه پیاده‌سازی ISR را نشان می‌دهد. این کد داده‌ها را از یک API فرضی دریافت کرده و هر ۱۰ ثانیه، صفحه را به‌روز می‌کند: + +
+
+ + {`// pages/isr-example.js + +export async function getStaticProps() { + const data = await fetch('https://jsonplaceholder.typicode.com/posts/1') + .then((res) => res.json()); + + return { + props: { data }, + revalidate: 10, // updates every 10 seconds + }; +} + +const ISRExample = ({ data }) => { + return ( +
+

ISR Example

+

Title: {data.title}

+

Body: {data.body}

+
+ ); +}; + +export default ISRExample; +`} +
+
+
+ +در پروژه‌های واقعی ممکن است داده‌ها ناقص باشند یا API به درستی پاسخ ندهد. در چنین مواردی، می‌توانید مانند قطعه کد زیر، عمل کنید: + +
+
+ + {`export async function getStaticProps() { + try { + const data = await fetch('https://jsonplaceholder.typicode.com/posts/1') + .then((res) => res.json()); + + if (!data) { + return { + notFound: true, // display 404 page + }; + } + + return { + props: { data }, + revalidate: 10, // update every 10 seconds + }; + } catch (error) { + console.error('Error fetching data:', error); + return { + props: { data: null }, + revalidate: 10, + }; + } +} +`} + +
+
+ + +
از آنجایی که فضای نوشتن در حالتِ پیش‌فرضِ Writable، متغیر است و در حالت فایل‌سیستم ReadOnly فضایی برای نوشتن وجود ندارد؛ ممکن است که به افزایش فضا برای ذخیره‌سازی صفحات ساخته شده مبتنی بر ISR، نیاز داشته باشید. برای این کار کافیست تا طبق مراحل زیر، عمل کنید: +
+