Next.js : 増分静的再生成 (ISR)

Linda Hamilton
リリース: 2024-10-24 18:39:43
オリジナル
785 人が閲覧しました

インクリメンタル静的再生 (ISR) あり

サイト全体を再作成しなくても、静的コンテンツを更新できます。ほとんどのリクエストに対して事前に作成された静的ページを提供することで、サーバーの負荷を軽減できます。次回の作成に時間がかかる前に、大量のコンテンツ ページを処理できます。

例から始めましょう :

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>
  )
}
ログイン後にコピー

この例はどのように機能するのか?

これらのページ (/post/1 など) に対して行われたすべてのリクエストは キャッシュされ、瞬時に処理されます。 30 秒が経過した後も、次のリクエストではキャッシュされた (古い) ページが表示されます。 キャッシュが無効になり、ページの新しいバージョンがバックグラウンドで生成され始めます。正常に生成されると、Next.js は更新されたページを表示してキャッシュします。/post/12 がリクエストされた場合、Next.js はこのページをオンデマンドで生成してキャッシュします。

さらに精度が必要な場合は、オンデマンド再検証を使用できますが、リアルタイムのデータが必要な場合は、動的処理への切り替えを検討してください。


revalidatePath を使用したオンデマンドの再検証

Next.js を使用すると、特定のページまたはルートのキャッシュを手動でクリアできます。つまり、特定のコンテンツが更新された場合、すべてのページを再作成するのではなく、変更されたページまたはコンテンツのみを再作成できます。

変更があったとき (たとえば、新しい投稿が追加されたとき)、ページをすぐに更新したい場合は、revalidatePath 関数を使用してこのプロセスをトリガーできます。つまり、新しいコンテンツがユーザーに追加されるとすぐに、新しいコンテンツが表示されるようにすることができます。

'use server'

import { revalidatePath } from 'next/cache'

export async function createPost() {
  // Invalidate the /posts route in the cache
  revalidatePath('/posts')
}
ログイン後にコピー

revalidateTag を使用したオンデマンドの再検証

Next.js アプリケーションでは、特定のデータまたはコンテンツをタグ付けすることで、キャッシュを手動でクリアできます。これは、特定のコンテンツが変更されたときに、そのコンテンツのキャッシュ全体をクリアするために使用されます。コンテンツが更新されると、ユーザーには最新のデータが表示されます。

export default async function Page() {
  const data = await fetch('https://api.vercel.app/blog', {
    next: { tags: ['posts'] },
  })
  const posts = await data.json()
  // ...
}
ログイン後にコピー

その後、revalidateTag を使用できます:

'use server'

import { revalidateTag } from 'next/cache'

export async function createPost() {
  // Invalidate all data tagged with 'posts' in the cache
  revalidateTag('posts')
}
ログイン後にコピー

ISR は、静的エクスポート を作成する場合にはサポートされません。静的にレンダリングされたルートに複数のフェッチ リクエストがあり、それぞれの revalidate 頻度が異なる場合、最も低い時間が ISR に使用されます。ただし、これらの再検証頻度はデータ キャッシュによって引き続き考慮されます。ルートで使用される フェッチ リクエスト のいずれかが再検証時間 0 であるか、明示的にストアなしの場合、ルートは動的に再検証されます。レンダリングされました。 ミドルウェアは、オンデマンド USER リクエストに対して実行されません。つまり、ミドルウェアのパス書き換えやロジックは適用されません。正確なパスを再検証していることを確認してください。たとえば、書き換えられた /post-1 の代わりに /post/1 になります。


私の記事が気に入ったら、コーヒーをおごってください :)
Next.js : Incremental Static Regeneration (ISR)

以上がNext.js : 増分静的再生成 (ISR)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:dev.to
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!