Next.js : Penjanaan Semula Statik Bertambah (ISR)

Linda Hamilton
Lepaskan: 2024-10-24 18:39:43
asal
785 orang telah melayarinya

Dengan Penjanaan Semula Statik Bertambah (ISR)

Kami boleh mengemas kini kandungan statik tanpa mencipta semula keseluruhan tapak. Kami boleh mengurangkan beban pelayan dengan menyediakan halaman statik pra-dicipta untuk kebanyakan permintaan. Kami boleh memproses sejumlah besar halaman kandungan sebelum masa penciptaan seterusnya adalah panjang.

Mari kita mulakan dengan contoh :

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>
  )
}
Salin selepas log masuk

Bagaimana contoh ini berfungsi ?

Semua permintaan yang dibuat ke halaman ini (cth. /post/1) adalah cache dan serta-merta. Selepas 30 saat berlalu, permintaan seterusnya masih akan menunjukkan halaman cache (lapuk). Cache tidak sah dan versi baharu halaman mula dijana di latar belakang. Setelah berjaya dijana, Next.js akan memaparkan dan cache halaman yang dikemas kini Jika /post/12 diminta, Next.js akan menjana dan cache halaman ini atas permintaan.

Jika anda memerlukan lebih ketepatan, atas permintaan pengesahan semula boleh digunakan, tetapi jika anda memerlukan data masa nyata, pertimbangkan untuk beralih kepada pemprosesan dinamik.


Pengesahan Semula atas permintaan dengan revalidatePath

Next.js membolehkan anda mengosongkan cache secara manual halaman atau laluan tertentu. Iaitu, apabila kandungan tertentu dikemas kini, bukannya mencipta semula semua halaman, anda hanya boleh mencipta semula halaman atau kandungan yang diubah.

Anda mahu halaman dikemas kini dengan segera apabila terdapat perubahan (contohnya, apabila siaran baharu ditambah), anda boleh mencetuskan proses ini dengan menggunakan fungsi revalidatePath. Dalam erti kata lain, anda boleh membuat kandungan baharu muncul sebaik sahaja kandungan baharu ditambahkan kepada pengguna.

'use server'

import { revalidatePath } from 'next/cache'

export async function createPost() {
  // Invalidate the /posts route in the cache
  revalidatePath('/posts')
}
Salin selepas log masuk

Pengesahan Semula atas permintaan dengan revalidateTag

Aplikasi

Next.js, ia membolehkan anda mengosongkan cache mereka secara manual dengan menandai data atau kandungan tertentu. Ini digunakan untuk mengosongkan keseluruhan cache kandungan tersebut apabila kandungan tertentu berubah. Apabila kandungan dikemas kini, pengguna melihat data terkini.

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

Anda kemudian boleh menggunakan revalidateTag :

'use server'

import { revalidateTag } from 'next/cache'

export async function createPost() {
  // Invalidate all data tagged with 'posts' in the cache
  revalidateTag('posts')
}
Salin selepas log masuk

ISR tidak disokong apabila mencipta Eksport Statik. Jika anda mempunyai berbilang permintaan pengambilan dalam laluan yang diberikan secara statik, dan setiap satu mempunyai kekerapan sahkan semula yang berbeza, masa paling rendah akan digunakan untuk ISR. Walau bagaimanapun, kekerapan pengesahan semula tersebut masih akan dihormati oleh Cache Data. Jika mana-mana permintaan ambil yang digunakan pada laluan mempunyai masa pengesahan semula 0, atau tiada stor yang jelas, laluan itu akan menjadi dinamik diberikan. Perisian Tengah tidak akan dilaksanakan untuk permintaan PENGGUNA atas permintaan, bermakna sebarang penulisan semula laluan atau logik dalam Perisian Tengah tidak akan digunakan. Pastikan anda mengesah semula laluan yang tepat. Contohnya, /post/1 bukannya /post-1 yang ditulis semula.


Jika anda suka artikel saya, anda boleh belikan saya kopi :)
Next.js : Incremental Static Regeneration (ISR)

Atas ialah kandungan terperinci Next.js : Penjanaan Semula Statik Bertambah (ISR). Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:dev.to
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!