成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

一文看懂Next.js渲染方法:CSR、SSR、SSG和ISR

譯文
開發 前端
本文介紹CSR、SSR、SSG和ISR這四種頁面渲染方法的不同之處以及何時使用它們。

譯者 | 布加迪

審校 | 孫淑娟

渲染是將React代碼轉換成HTML的過程。用戶選擇的渲染方法取決于所處理的數據以及用戶對性能的關注程度。

在Next.js中,渲染的用途非常廣泛。用戶可以用靜態或增量方式渲染客戶端或服務器端頁面。

看看這些方法是如何工作的以及每種方法有怎樣的表現。

服務器端渲染

就服務器端渲染(SSR)而言,當用戶訪問網頁時,瀏覽器向服務器發送關于該頁面的請求。服務器從數據庫獲取必要的數據(如果需要的話),并將其與頁面內容一同發送到瀏覽器。然后瀏覽器將其顯示給用戶。

瀏覽器對用戶點擊的每個鏈接發出此請求,這意味著服務器每次都處理請求。這可能會降低網站的性能。然而,服務器端渲染非常適合使用動態數據的頁面。

每當用戶請求時,使用getServerSideProps重新構建頁面。

export default function Home({ data }) {
return (
<main>
// Use data
</main>
);
}
export async function getServerSideProps() {
// Fetch data from external api
const res = await fetch('https://.../data')
const data = await res.json()
// Will be passed to the page component as props
return { props: { data } }
}

getServerSideProps只在服務器上運行,它是這樣運行的:

  • 當用戶直接訪問頁面時,它在請求時運行,頁面使用它返回的屬性來預渲染。
  • 當用戶通過Next鏈接訪問頁面時,瀏覽器向運行它的服務器發送請求。

在新版本中,用戶可以選擇使用頁面或布局中的動態數據獲取來享用服務器端渲染。

動態數據獲取是fetch()請求,它通過將緩存選項設置為“no-store”來選擇退出緩存。

fetch (https://..。', {cache: 'no-store'});

或者,將revalidate設置為0:

fetch (https://..。', {next: {revalidate: 0}});

該功能目前處于測試階段,請記住這一點。可以在??Next.js 13 Beta文檔??中進一步了解動態數據獲取。

客戶端渲染

當用戶需要頻繁更新數據或不想預渲染頁面時,應該使用客戶端渲染(CSR)。用戶可以在頁面層面或組件層面實現CSR。在頁面層面,Next.js在運行時獲取數據;而在組件層面執行操作時,它在頁面掛載時獲取數據。正因為如此,CSR可能導致性能變慢。

使用useEffect()鉤子在客戶端渲染頁面,如下所示:

import { useState, useEffect } from 'react'
function Home() {
const [data, setData] = useState(null)
const [isLoading, setLoading] = useState(false)
useEffect(() => {
setLoading(true)
fetch('/api/get-data')
.then((res) => res.json())
.then((data) => {
setData(data)
setLoading(false)
})
}, [])
if (isLoading) return <p>Loading...</p>
if (!data) return <p>No data</p>
return (
<div>
// Use data
</div>
)
}

還可以使用SWR鉤子。它緩存數據,一旦數據過時,就重新驗證數據。

import useSWR from 'swr'
const fetcher = (...args) => fetch(...args).then((res) => res.json())
function Home() {
const { data, error } = useSWR('/api/data', fetcher)
if (error) return <div>Failed to load</div>
if (!data) return <div>Loading...</div>
return (
<div>
// Use data
</div>
)
}

在Next.js 13中,用戶需要使用客戶端組件,為此在文件頂部添加“use client”指令。

"use client";
export default () => {
return (
<div>
// Client component
</div>
);
};

SSR和CSR的區別在于,在SSR中,從服務器上的每個頁面請求獲取數據;而在CSR中,從客戶端獲取數據。

靜態站點生成

就靜態站點生成(SSG)而言,頁面在構建期間只獲取一次數據。靜態生成頁面非常快,性能良好,因為所有頁面都事先構建。SSG因此非常適合使用靜態內容(比如銷售頁面或博客)的頁面。

在Next.js中,用戶必須從想要靜態渲染的頁面中導出 getStaticProps函數。

export default function Home({ data }) {
return (
<main>
// Use data
</main>
);
}
export async function getStaticProps() {
// Fetch data from external API at build time
const res = await fetch('https://.../data')
const data = await res.json()
// Will be passed to the page component as props
return { props: { data } }
}

用戶還可以在getStaticProps里面查詢數據庫。

export async function getStaticProps() {
// Call function to fetch data from database
const data = await getDataFromDB()
return { props: { data } }
}

在Next.js 13中,靜態渲染是默認操作,內容被獲取和緩存,除非用戶關閉了緩存選項。

async function getData() {
const res = await fetch('https://.../data');
return res.json();
}
export default async function Home() {
const data = await getData();
return (
<main>
// Use data
</main>
);
}

可從文檔進一步了解??Next.js 13中的靜態渲染??。

增量靜態生成

有時用戶想使用SSG,但又想定期更新內容,這時候增量靜態生成(ISG)大有幫助。

ISG讓用戶可以在構建靜態頁面后在指定的時間間隔后創建或更新靜態頁面。這樣一來,用戶不需要重建整個站點,只需重建需要它的頁面。

ISG保留了SSG的優點,又增加了為用戶提供最新內容的好處。ISG非常適合站點上那些使用不斷變化的數據的頁面。比如說,用戶可以使用ISR渲染博文,以便在編輯文章或添加新文章后博客保持更新。

若要使用ISR,將revalidate屬性添加到頁面上的getStaticProps函數中。

export async function getStaticProps() {
const res = await fetch('https://.../data')
const data = await res.json()
return {
props: {
data,
},
revalidate: 60
}
}

在這里,當請求在60秒后到來時,Next.js將嘗試重新構建頁面。下一個請求將產生帶有更新頁面的響應。

在Next.js 13中,使用fetch中的revalidate,就像這樣:

fetch (https://..。/data', {next: {revalidate: 60}});

用戶可以將時間間隔設置為最適合其數據的任何時間間隔。

如何選擇渲染方法?

到目前為止,用戶已了解了Next.js中的四種渲染方法:CSR、SSR、SSG和ISG。每種方法都適用于不同的情況。CSR適用于需要新數據的頁面。SSR適用于使用動態數據的頁面,但它對SEO較為友好。

SSG適合數據基本上靜態的頁面,而ISG最適合含有用戶想要間隔更新的數據的頁面。SSG和ISG從性能和SEO方面來說都很出色,因為數據預獲取,用戶還可以緩存數據。

原文標題:??Understanding Next.js Rendering Methods: CSR, SSR, SSG, ISR??,作者:Mary Gathoni


責任編輯:華軒 來源: 51CTO
相關推薦

2024-05-16 11:12:16

2021-12-27 08:31:42

Next.js SSRSSG

2022-02-22 20:48:48

RemixNext.js框架

2023-09-11 07:31:58

2025-03-06 00:00:00

2024-01-25 09:04:25

2020-12-14 11:40:27

Next.js SSRReact

2025-03-21 00:05:00

2025-03-31 00:00:00

?增量靜態再生Next.jsISR

2020-03-31 14:40:24

HashMap源碼Java

2020-12-04 09:26:13

SSR 框架企業級

2016-08-18 00:21:12

網絡爬蟲抓取網絡

2021-06-23 16:05:05

鴻蒙HarmonyOS應用

2017-07-28 09:11:14

HIVEHBASE區別

2024-08-12 12:30:27

2019-07-01 09:22:15

Linux操作系統硬件

2019-05-22 09:50:42

Python沙箱逃逸網絡攻擊

2025-01-20 09:15:00

iOS 18.3蘋果iOS 18

2021-08-02 06:56:19

TypeScript編程語言編譯器
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 久久大香 | 国产精品久久久久久婷婷天堂 | 中文字幕亚洲一区二区三区 | 国产一级在线观看 | 久久久久国产精品一区二区 | 亚洲一区二区日韩 | 亚洲h视频| 欧美一区二区三区一在线观看 | 久久久久综合 | 亚洲欧美综合 | 久久69精品久久久久久久电影好 | 午夜天堂精品久久久久 | 一区二区三区四区国产 | 欧美专区日韩专区 | 毛片在线免费 | 中文字幕亚洲精品在线观看 | 久久久久国产精品免费免费搜索 | 亚洲精选一区二区 | 找个黄色片 | 亚洲综合激情 | 99精品欧美 | 亚洲欧洲精品成人久久奇米网 | 亚洲免费久久久 | 4h影视 | 成人久草| 成人在线中文字幕 | 人人人人干 | 久热中文字幕 | 久久性色 | 国产精品乱码一区二区三区 | 国产一区二区三区四区 | 欧美日韩亚洲视频 | 欧美炮房| 成年人在线视频 | 中国一级毛片免费 | 国产精品久久久久久久一区二区 | 91中文字幕在线观看 | 亚洲一区二区久久 | 一区二区三区播放 | 精品亚洲视频在线 | 国产电影一区二区三区爱妃记 |