国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

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

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

譯者 | 布加迪

審校 | 孫淑娟

渲染是將React代碼轉(zhuǎn)換成HTML的過程。用戶選擇的渲染方法取決于所處理的數(shù)據(jù)以及用戶對性能的關(guān)注程度。

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

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

服務(wù)器端渲染

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

瀏覽器對用戶點(diǎn)擊的每個(gè)鏈接發(fā)出此請求,這意味著服務(wù)器每次都處理請求。這可能會降低網(wǎng)站的性能。然而,服務(wù)器端渲染非常適合使用動態(tài)數(shù)據(jù)的頁面。

每當(dāng)用戶請求時(shí),使用getServerSideProps重新構(gòu)建頁面。

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只在服務(wù)器上運(yùn)行,它是這樣運(yùn)行的:

  • 當(dāng)用戶直接訪問頁面時(shí),它在請求時(shí)運(yùn)行,頁面使用它返回的屬性來預(yù)渲染。
  • 當(dāng)用戶通過Next鏈接訪問頁面時(shí),瀏覽器向運(yùn)行它的服務(wù)器發(fā)送請求。

在新版本中,用戶可以選擇使用頁面或布局中的動態(tài)數(shù)據(jù)獲取來享用服務(wù)器端渲染。

動態(tài)數(shù)據(jù)獲取是fetch()請求,它通過將緩存選項(xiàng)設(shè)置為“no-store”來選擇退出緩存。

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

或者,將revalidate設(shè)置為0:

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

該功能目前處于測試階段,請記住這一點(diǎn)。可以在??Next.js 13 Beta文檔??中進(jìn)一步了解動態(tài)數(shù)據(jù)獲取。

客戶端渲染

當(dāng)用戶需要頻繁更新數(shù)據(jù)或不想預(yù)渲染頁面時(shí),應(yīng)該使用客戶端渲染(CSR)。用戶可以在頁面層面或組件層面實(shí)現(xiàn)CSR。在頁面層面,Next.js在運(yùn)行時(shí)獲取數(shù)據(jù);而在組件層面執(zhí)行操作時(shí),它在頁面掛載時(shí)獲取數(shù)據(jù)。正因?yàn)槿绱耍珻SR可能導(dǎo)致性能變慢。

使用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鉤子。它緩存數(shù)據(jù),一旦數(shù)據(jù)過時(shí),就重新驗(yàn)證數(shù)據(jù)。

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的區(qū)別在于,在SSR中,從服務(wù)器上的每個(gè)頁面請求獲取數(shù)據(jù);而在CSR中,從客戶端獲取數(shù)據(jù)。

靜態(tài)站點(diǎn)生成

就靜態(tài)站點(diǎn)生成(SSG)而言,頁面在構(gòu)建期間只獲取一次數(shù)據(jù)。靜態(tài)生成頁面非常快,性能良好,因?yàn)樗许撁娑际孪葮?gòu)建。SSG因此非常適合使用靜態(tài)內(nèi)容(比如銷售頁面或博客)的頁面。

在Next.js中,用戶必須從想要靜態(tài)渲染的頁面中導(dǎo)出 getStaticProps函數(shù)。

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里面查詢數(shù)據(jù)庫。

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

在Next.js 13中,靜態(tài)渲染是默認(rèn)操作,內(nèi)容被獲取和緩存,除非用戶關(guān)閉了緩存選項(xiàng)。

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>
);
}

可從文檔進(jìn)一步了解??Next.js 13中的靜態(tài)渲染??。

增量靜態(tài)生成

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

ISG讓用戶可以在構(gòu)建靜態(tài)頁面后在指定的時(shí)間間隔后創(chuàng)建或更新靜態(tài)頁面。這樣一來,用戶不需要重建整個(gè)站點(diǎn),只需重建需要它的頁面。

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

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

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

在這里,當(dāng)請求在60秒后到來時(shí),Next.js將嘗試重新構(gòu)建頁面。下一個(gè)請求將產(chǎn)生帶有更新頁面的響應(yīng)。

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

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

用戶可以將時(shí)間間隔設(shè)置為最適合其數(shù)據(jù)的任何時(shí)間間隔。

如何選擇渲染方法?

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

SSG適合數(shù)據(jù)基本上靜態(tài)的頁面,而ISG最適合含有用戶想要間隔更新的數(shù)據(jù)的頁面。SSG和ISG從性能和SEO方面來說都很出色,因?yàn)閿?shù)據(jù)預(yù)獲取,用戶還可以緩存數(shù)據(jù)。

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


責(zé)任編輯:華軒 來源: 51CTO
相關(guān)推薦

2024-05-16 11:12:16

2021-12-27 08:31:42

Next.js SSRSSG

2023-09-11 07:31:58

2022-02-22 20:48:48

RemixNext.js框架

2025-03-06 00:00:00

2025-07-23 04: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

?增量靜態(tài)再生Next.jsISR

2020-03-31 14:40:24

HashMap源碼Java

2020-12-04 09:26:13

SSR 框架企業(yè)級

2025-07-11 01:45:00

SIM卡模塊識別

2017-07-28 09:11:14

HIVEHBASE區(qū)別

2024-08-12 12:30:27

2021-06-23 16:05:05

鴻蒙HarmonyOS應(yīng)用

2016-08-18 00:21:12

網(wǎng)絡(luò)爬蟲抓取網(wǎng)絡(luò)

2021-08-02 06:56:19

TypeScript編程語言編譯器

2025-01-20 09:15:00

iOS 18.3蘋果iOS 18
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號

丰满白嫩尤物一区二区| 久久国产高清| 日韩欧美精品三级| www污污在线| 国产成人免费在线观看不卡| 成人日韩av在线| av在线视屏| 色婷婷综合五月| 色视频www在线播放国产人成| 国产精品一区二区三区美女| 亚洲成人精品久久久| 自拍偷拍在线视频| 国产欧美精品一区二区色综合| 亚洲 国产 欧美一区| 伊人久久大香线| 欧美一区二区三区艳史| 成人四虎影院| 国产偷亚洲偷欧美偷精品| av在线播放网| 91福利在线导航| 99热在线网站| 一区二区三区加勒比av| 久久婷五月综合| 成人亚洲一区二区一| 日本一区二区三区免费观看| 亚洲美女视频| 成人激情综合网| 日韩久久精品网| 国产欧美日韩精品专区| 精品久久国产| 国产精品成人一区| 日韩综合网站| 91成人免费观看| 亚洲一区欧美| 国产chinese精品一区二区| 欧美一区二区三区久久精品| 91精品国产91久久久久青草| 欧美成人一品| 国产免费一区二区三区| 99这里有精品| 亚洲欧洲精品一区二区三区波多野1战4 | 日本道精品一区二区三区| 女人高潮特级毛片| 亚洲三级在线播放| 日本激情视频网| 天天综合日日夜夜精品| 免费在线黄色网址| 欧美日韩国产综合草草| 国产乱色在线观看| 日韩欧美高清一区| 美脚恋feet久草欧美| 色狠狠久久aa北条麻妃| 欧美a一级片| 91精品国产成人www| 欧美**字幕| 国产在线精品一区二区三区》 | 国产精品91一区二区三区| 国产精品久久久久久婷婷天堂| 久久中文视频| 国产精品免费观看高清| 麻豆91精品| 成品人视频ww入口| 久久久精品2019中文字幕之3| caoporen人人| 欧美性色黄大片| 福利在线免费视频| 欧美激情亚洲另类| 黄色国产精品| 久久这里只有精品23| 亚洲精品国产精品乱码不99 | 久久天堂av综合合色蜜桃网| 奇米777影视成人四色| 色综合久久88色综合天天6| 国产网红在线观看| 久久这里有精品| 亚欧美无遮挡hd高清在线视频| 日韩av电影免费在线| 久久久亚洲午夜电影| 视频一区二区在线播放| 日韩第一页在线| 老汉色老汉首页av亚洲| 精品无码久久久久国产| 99精品在线免费| 免费看成年人视频在线观看| 精品对白一区国产伦| 91成人精品在线| 精品国产乱码久久久久软件| 97精品久久久久中文字幕| 最近最新中文字幕在线| 亚洲第一网站免费视频| 国产一区二区三区国产精品| 99精彩视频在线观看免费| 国产精品99久久久| 天堂中文在线视频| 精品久久久av| 激情亚洲成人| 韩国日本在线视频| 欧美综合色免费| 精品视频在线观看免费观看 | 超碰网在线观看| 欧美午夜无遮挡| 亚洲人体在线| 精品国产乱码久久久久久丨区2区| 99久久婷婷国产精品综合| 国产一级网站视频在线| 久久天天躁狠狠躁夜夜爽蜜月| 国产综合激情| 亚洲一区日韩精品| 精品无人国产偷自产在线| 久久在线电影| 能看的毛片网站| 精品国产免费久久| 99久久99久久精品国产片桃花| 性一交一乱一伧国产女士spa| 色噜噜狠狠色综合中国| av成人综合| 性生活免费观看视频| 日本韩国精品一区二区在线观看| 日韩欧洲国产| 中国黄色录像片| 精品视频免费在线| 成人在线免费视频观看| 国产精品无码专区av在线播放| 亚洲成人激情图| 国产精品入口| 黄视频在线播放| 国产精品久久一区主播| 欧美国产日本韩| 亚洲国产伊人| 成人在线免费高清视频| 欧美乱熟臀69xxxxxx| 日韩av免费大片| 欧美日韩中文不卡| 免费97视频在线精品国自产拍| 久久精品国产一区二区| 超碰在线免费播放| 国产视频不卡| 91久久一区二区| 91精品国产成人观看| 香港经典三级在线| 国产精品成人aaaaa网站| 国产欧美日韩三级| 亚洲亚洲一区二区三区| 大陆极品少妇内射aaaaa| 亚洲天堂免费观看| 国产精品亚洲第一| 国产一区二区主播在线| 黄色一级片国产| 国产亚洲精品美女久久久久| 国内久久精品视频| 神马电影网我不卡| 奇米精品一区二区三区| 中文字幕国产日韩| 91色九色蝌蚪| 成人h动漫免费观看网站| 高清一区在线观看| 欧美在线亚洲一区| 午夜视频一区二区| 欧美在线三级| 久操视频在线观看| 亚洲春色综合另类校园电影| 日韩精品有码在线观看| 风间由美性色一区二区三区 | 国产一区二区主播在线| 国产911在线观看| 视频直播国产精品| 久久色中文字幕| 国产精品成人自拍| 老司机性视频| www日韩av| 亚洲国产成人精品一区二区| 国产宾馆实践打屁股91| 亚洲精品aⅴ| 亚洲1024| 欧美日本亚洲| 亚洲片在线资源| 国产日韩欧美一区二区三区综合| 欧美有码在线| 超碰97在线免费观看| 亚洲欧美精品在线观看| 尤物99国产成人精品视频| 国产午夜精品福利| japanese国产精品| 麻豆视频在线播放| 亚洲欧美一二三| 欧美成人黑人xx视频免费观看| 亚洲天堂中文字幕| 中文日韩欧美| 国产精品久久亚洲不卡| 日韩av手机版| 97人人模人人爽视频一区二区| 日韩欧美成人午夜| 久久久久久久久久久久久久久99 | 手机精品视频在线观看| 17videosex性欧美| 情se视频网在线观看| 羞羞网www| 嫩草av久久伊人妇女超级a| 国产一区国产精品| 成人精品视频久久久久 |