Next.js 15 : Incremental Static Regeneration (ISR)

Next.js 15 : Incremental Static Regeneration (ISR)




With Incremental Static Regeneration (ISR)

Incremental Static Regeneration (ISR) in Next.js provides a powerful approach to combine the best of static and dynamic content. By enabling static content updates without recreating the entire site, ISR allows for a more scalable and efficient way of handling pages. We can significantly reduce server load, handle large volumes of content, and ensure users see up-to-date information without waiting for full regeneration of all pages.

We can update static content without recreating the entire site. We can reduce the server load by providing prerendered static pages for most requests.We can process a large number of content pages before the next creation times are long.

Let’s start with an example :

export const revalidate = 30

export const dynamicParams = true // or false, to 404 on unknown paths

export async function generateStaticParams() {
  const posts = await fetch('https://jsonplaceholder.typicode.com/posts/').then((res) =>
    res.json()
  )
  return posts.map((post) => ({
    id: String(post.id),
  }))
}

export default async function Page({ params }) {
  const post = await fetch(`https://jsonplaceholder.typicode.com/posts/${params.id}`).then(
    (res) => res.json()
  )
  return (
    <main>
      <h1>{post.title}</h1>
      <p>{post.content}</p>
    </main>
  )
}
Enter fullscreen mode

Exit fullscreen mode

How this example works ?

All requests made to these pages (e.g. /post/1) are cached and instantaneous. After 30 seconds has passed, the next request will still show the cached (stale) page. The cache is invalidated and a new version of the page begins generating in the background. Once generated successfully, Next.js will display and cache the updated page If /post/12 is requested, Next.js will generate and cache this page on-demand.

If you need more precision, on-demand revalidation can be used, but if you need real-time data, consider switching to dynamic processing.




On-demand Revalidation with revalidatePath

Next.js allows you to manually clear the cache of a specific page or route . That is, when a certain content is updated, instead of recreating all the pages, you can only recreate the changed page or content.

You want the page to be updated immediately when there is a change (for example, when a new post is added), you can trigger this process by using the revalidatePath function. In other words, you can make the new content appear as soon as a new content is added to the user.

'use server'

import { revalidatePath } from 'next/cache'

export async function createPost() {
  // Invalidate the /posts route in the cache
  revalidatePath('/posts')
}
Enter fullscreen mode

Exit fullscreen mode




On-demand Revalidation with revalidateTag

Next.js applications, it allows you to manually clear their cache by tagging certain data or content. This is used to clear the entire cache of that content when a certain content changes. When the content is updated, users see the latest data.

export default async function Page() {
  const data = await fetch('https://api.vercel.app/blog', {
    next: { tags: ['posts'] },
  })
  const posts = await data.json()
  // ...
}
Enter fullscreen mode

Exit fullscreen mode

You can then use revalidateTag :

'use server'

import { revalidateTag } from 'next/cache'

export async function createPost() {
  // Invalidate all data tagged with 'posts' in the cache
  revalidateTag('posts')
}
Enter fullscreen mode

Exit fullscreen mode


ISR is not supported when creating a Static Export. If you have multiple fetch requests in a statically rendered route, and each has a different revalidate frequency, the lowest time will be used for ISR. However, those revalidate frequencies will still be respected by the Data Cache.If any of the fetch requests used on a route have a revalidate’ time of 0, or an explicit no-store, the route will be dynamically rendered. Middleware won’t be executed for on-demand USER requests, meaning any path rewrites or logic in Middleware will not be applied. Ensure you are revalidating the exact path. For example, /post/1 instead of a rewritten /post-1.




Conclusion

ISR is an optimal solution for projects where content updates frequently, but full dynamic rendering is not necessary. However, in scenarios where real-time data is a priority, switching to dynamic processing might be more appropriate.


If you like my articles, you can buy me a coffee 🙂



Source link
lol

By stp2y

Leave a Reply

Your email address will not be published. Required fields are marked *

No widgets found. Go to Widget page and add the widget in Offcanvas Sidebar Widget Area.