Next.js 14 App Router 预渲染 代码实践 静态页面渲染 SSG 服务端渲染代码 SSR
最近学习了Next.js 14框架,总结一下预渲染技术和具体代码用法,如果有理解不对的地方还请大佬指正。
注意以下内容只讨论App Router的新方案(getStaticProps已经弃用)。
1.简介
预渲染主要分为2种技术,静态页面渲染(SSG)和服务器端渲染(SSR)
预渲染简单说就在浏览器访问网页页面时,由服务器返回完整的html文件,而不是部分数据。
2.静态页面渲染(SSG)
使用场景:页面内容基本不怎么变动,又考虑SEO优化和首次页面加载速度快。
优点:SEO优化,首页加载速度快,服务端和客户端压力都小。
缺点:内容更新不及时。
实现:在编译项目的时候就把js动态页面编译成html静态页面,客户端访问时,服务器直接返回完整html文件,有点返璞归真的意味。
主要情况有以下4种情况:
1.以下是一个页面(Page.js)的内容,在一个页面中没有任何动态操作时,会被默认编译成静态页面html。
export default function MyPage(){return <main><h1>我的首页!</h1></main>
}
2.以下是一个页面(Page.js)的内容,在页面中上来就执行fetch操作时,会被默认编译成静态页面。在编译时会直接去拉取https://jsonplaceholder.typicode.com/users的信息生成html。
export default async function MyPage(){const response = await fetch('https://jsonplaceholder.typicode.com/users')const data = await response.json()//以下不必关心,主要看上面return(<>...此处省略</>)
}
3.动态路由
在动态路由中,希望生成静态页面,添加getStaticPaths函数,然后指定id,对应的id的页面就在编译时生成静态页面。
export default async function Post({ params }) {const id = params.postIdconst response = await fetch(`https://jsonplaceholder.typicode.com/posts/${id}`)//在服务器端获取数据const data = await response.json()//以下不必关心,主要看上面return (...此处省略)
}export async function getStaticPaths(){return {paths: [{params:{postId: '1'}},{params:{postId: '2'}},{params:{postId: '3'}}],fallback: false}
}
其中fallback为false,表示访问除了指定的1,2,3的postId之外的其他页面全报404找不到。
其中fallback为true,表示访问除了指定的1,2,3的postId之外,在客户端第一次访问改页面时,会先返回一个加载过渡页面,服务器会去尝试静态生成html,然后在返回html给客户端。
其中fallback为block,表示访问除了指定的1,2,3的postId之外,在客户端第一次访问改页面时,会卡住等待,服务器会去尝试静态生成html,然后在返回html给客户端。
4.增量静态生成 ISR(Buff叠加)
如果页面的内容是会更新的,纯纯的静态页面就无法满足了,那么可以使用ISR技术。
说人话就是,我虽然是静态页面,但是我只保持给定时间(如5秒钟),超过5秒钟后,如果有客户端来访问,服务器就重新去fetch数据,重新生成一次html再返回给客户端。
export const revalidate = 5 //5s后如果有请求,则重新生成该页面export default async function MyPage(){const response = await fetch('https://jsonplaceholder.typicode.com/users')const data = await response.json()//以下是data的使用,不必关心,主要看上面return(<>...此处省略</>)
}
如上,只需要把revalidate设定并export出去,就可以使用ISR技术了,是不是很简单。
3.服务端页面渲染(SSR)
使用场景:页面内容经常变动,又考虑SEO优化和页面加载速度快。
优点:SEO优化,首次加载速度快,客户端压力小。
缺点:服务端压力变大。
实现:服务端渲染就是客户端每次页面访问时,服务器都会重新fetch拉取数据,并重新生成html,再返回给客户端。
使用方法如下。
export default async function MyPage(){const response = await fetch('https://jsonplaceholder.typicode.com/users',{ cache: 'no-store'})const data = await response.json()//以下不必关心,主要看上面return(<>...此处省略</>)
}
只需要在fetch后面加入{ cache: 'no-store'}就可以开启了,是不是很简单。
4.客户端页面渲染(CSR)
使用场景:用户动态交互很多的页面,也不需要SEO。
优点:动态交互,服务器压力小。
缺点:首次加载速度慢,页面内容不是纯html,不利于SEO。
实现:这种就是传统的react的方式,利用useEffect去拉取数据,注意一定要标明"use client",不是nextjs的方式了,但是也可以在nextjs中使用。
"use client"//默认next.js为"use server",所有使用CSR时必须添加该标识import { useState,useEffect } from "react";//客户端获取数据的方法
function MyPage(){const [data, setData] = useState(null)useEffect(()=>{async function fetchMyData() {const response = await fetch('https://jsonplaceholder.typicode.com/users')const data = await response.json()setData(data)}fetchMyData()},[])//以下不必关心,主要看上面return (...此处省略)
}export default MyPage
总结
在实际开发一个网站时,可能需要将以上几种方案混合在一起,发挥各自的特长,而且这些都可以在Next.js中做到,是不是很强大?哈哈,以上是我的学习总结,希望能帮到你,加油💪🏻
相关文章:
Next.js 14 App Router 预渲染 代码实践 静态页面渲染 SSG 服务端渲染代码 SSR
最近学习了Next.js 14框架,总结一下预渲染技术和具体代码用法,如果有理解不对的地方还请大佬指正。 注意以下内容只讨论App Router的新方案(getStaticProps已经弃用)。 1.简介 预渲染主要分为2种技术,静态页面渲染(…...
阿里云人工智能ACP错题整理.txt
1、TextRank是一种关键词抽取和文档摘要的排序算法,由谷歌的网页重要性排序算法PageRank算法改进而来,利用文本内部的词语间的语义便可以抽取关键词,它能够从一个给定的文本中抽取出该文本的关键词、关键词组,并使用抽取式的自动文…...
为 WebSocket 配置 Nginx 反向代理来支持 Uvicorn 的最佳实践
前景 要为WebSocket(以 ws:// 或 wss:// 协议)配置 Nginx 反向代理来代理 Uvicorn 服务器(或其他支持 WebSocket 的应用),需要确保 Nginx 和 Uvicorn 支持 WebSocket 连接,并做一些特定的配置。WebSocket 协议与 HTTP/HTTPS 不同,因此需要在 Nginx 中设置正确的代理头和…...
Centos7通过Docker安装openGauss5.0.2并配置用户供Navicat连接使用
下载镜像 [rootiZ2ze3qc9ouxm10ykn3cvdZ ~]# docker pull swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/enmotech/opengauss:5.0.2 5.0.2: Pulling from ddn-k8s/docker.io/enmotech/opengauss 2ec76a50fe7c: Pull complete e48b50219b49: Pull complete 512e203af4…...
生成树详细配置(STP、RSTP、MSTP)
目录 一. 实验内容 STP配置实验 RSTP配置实验 MSTP配置实验 二. 1 ) STP配置实验 实验拓扑 编辑 实验配置 实验结果 2 ) RSTP配置实验 实验拓扑 实验配置 实验结果 3 ) MSTP配置实验 实验拓扑 实验配置 编辑 实验结果 三 实验总结 一. 实验内容 1) …...
服务器环境搭建-5 Nexus搭建与使用介绍
背景 本文介绍nexus的安装、配置和使用,之后通过案例的方式演示使用过程。 1.下载和安装 本文使用Nexus 3.x版本进行演示 下载地址:Download Nexus Repository OSS | Sonatype 国外网站下载速度较慢,也可以通过百度网盘下载(提取码:9999): …...
将 Parallels Desktop(PD虚拟机)安装在移动硬盘上,有影响吗?
当我们谈论在移动硬盘上安装 Parallels Desktop(简称PD虚拟机)及其对性能的影响时,特别是在运行如Unigraphics这样的资源密集型软件时,用户需要在便携性与性能之间找到最佳平衡。本文将深入探讨PD虚拟机装在移动硬盘有影响吗&…...
PHP智能化云端培训考试系统小程序源码
智能化云端培训考试系统:重塑学习评估的未来 🌟 引言:迈向智能教育的新时代 在这个日新月异的数字时代,教育也在经历着前所未有的变革。智能化云端培训考试系统的出现,正是这一变革的生动体现。它不仅打破了传统教育的…...
内幕!smardaten无代码平台全方位测评,这些细节你绝对想不到!
目录 一、引言二、测评要点2.1、前后端交互嵌套2.2、兼容性与可扩展性2.2.1、页面集成2.2.2、数据集成2.2.3、接口集成2.2.4、权限集成2.2.5、代码扩展支持 2.3、UI定制2.4、开发环境的隔离2.5、OEM定制2.6、多语言切换2.7、AI大模型能力 三、总结 一、引言 作为一枚IT从业者&…...
计算机专业的真正的就业情况
首先听到计算机行业,大多数人岗位已经饱和,前端已死,程序员35岁危机。但是事实上这些认知都是片面的,今天由我来为大家分析计算机行业的内幕。 疫情过后,过内各种行业都受到了冲击,你们敢说除了体制内的行业…...
Java对象列表属性映射工具类
背景 经常有这种情况,就是获取到一个对象列表之后,需要根据对象里某个字段的值去获取另一个字段的值。如下所示,有个Item对象列表,Item对象里有个id字段和Value字段,现需要根据id的值去查询value的值。 // 测试数据Li…...
.net core 通过Sqlsugar生成实体
通过替换字符串的方式生成代码,其他代码也可以通这种方式生成 直接上代码 设置模板 将这几个模板文件设置为:嵌入资源 模板内容: using SqlSugar;namespace {Namespace}.Domain.Admin.{ModelName}; /// <summary> /// {TableDisplay…...
ORCA-3D避障算法解析
二维ORCA原理参考: https://zhuanlan.zhihu.com/p/669426124 ORCA原理图解 1. 找到避障速度增量 u 碰撞处理分为三种情况: (1)没有发生碰撞,且相对速度落在小圆里 (2)没有发生碰撞࿰…...
CentOS 7停更官方yum源无法使用,更换阿里源
CentOS 7官方源已经停止维护,导致无法使用yum更新软件。通过尝试使用阿里云、清华大学等第三方源解决,现以阿里云第三方源进行配置: 1、备份原有的yum源配置文件 # cp -a /etc/yum.repos.d /etc/yum.repos.d.bak 2、删除原有的yum源配置文…...
Introduction结构
写好论文的**Introduction(引言)**部分是至关重要的,因为它为读者提供了背景信息,并引导他们进入论文的核心主题。一个优秀的引言应该具备以下几个关键要素: 1. 背景介绍 概述问题:首先,你需要…...
基于SpringBoot实现SpringMvc上传下载功能实现
SpringMvc上传下载功能实现 1.创建新的项目 1)项目信息填写 Spring Initializr (单击选中)Name(填写项目名字)Language(选择开发语言)Type(选择工具Maven)Group()JDK(jdk选择17 &…...
vue 控制组件是否显示
在Vue中,控制组件的显示通常使用v-if、v-else-if、v-else或v-show指令。 1.v-if:条件性地渲染元素,如果条件为假,元素甚至不会被渲染到DOM中。 <template><div><MyComponent v-if"showMyComponent" /&…...
生产部门不给力?精益化生产管理咨询公司为您出谋划策
问题背景 近年来,许多企业的生产部门面临着各种挑战和困难。生产效率低下、产品质量不稳定、生产成本过高等问题频频出现,给企业的发展带来了困扰。面对这一现状,许多企业开始寻求专业的管理咨询公司的帮助,以期能够通过精益生产…...
HTML+CSS - 网页布局之网格布局
1. dispaly设置 display是 CSS 中用于设置元素的显示方式的属性。它决定了元素如何被渲染到页面上。不同的display值会改变元素的显示行为,包括布局、排版以及对其他元素的影响。 其中网格容器是最常用的几种方式之一,在文档中创建类似于网格的效果&…...
基于51单片机的16X16点阵显示屏proteus仿真
地址: https://pan.baidu.com/s/1JQ225NSKweqf1Zlad_f1Mw 提取码:1234 仿真图: 芯片/模块的特点: AT89C52/AT89C51简介: AT89C52/AT89C51是一款经典的8位单片机,是意法半导体(STMicroelectro…...
大数据学习栈记——Neo4j的安装与使用
本文介绍图数据库Neofj的安装与使用,操作系统:Ubuntu24.04,Neofj版本:2025.04.0。 Apt安装 Neofj可以进行官网安装:Neo4j Deployment Center - Graph Database & Analytics 我这里安装是添加软件源的方法 最新版…...
XCTF-web-easyupload
试了试php,php7,pht,phtml等,都没有用 尝试.user.ini 抓包修改将.user.ini修改为jpg图片 在上传一个123.jpg 用蚁剑连接,得到flag...
手游刚开服就被攻击怎么办?如何防御DDoS?
开服初期是手游最脆弱的阶段,极易成为DDoS攻击的目标。一旦遭遇攻击,可能导致服务器瘫痪、玩家流失,甚至造成巨大经济损失。本文为开发者提供一套简洁有效的应急与防御方案,帮助快速应对并构建长期防护体系。 一、遭遇攻击的紧急应…...
多模态2025:技术路线“神仙打架”,视频生成冲上云霄
文|魏琳华 编|王一粟 一场大会,聚集了中国多模态大模型的“半壁江山”。 智源大会2025为期两天的论坛中,汇集了学界、创业公司和大厂等三方的热门选手,关于多模态的集中讨论达到了前所未有的热度。其中,…...
突破不可导策略的训练难题:零阶优化与强化学习的深度嵌合
强化学习(Reinforcement Learning, RL)是工业领域智能控制的重要方法。它的基本原理是将最优控制问题建模为马尔可夫决策过程,然后使用强化学习的Actor-Critic机制(中文译作“知行互动”机制),逐步迭代求解…...
安宝特方案丨XRSOP人员作业标准化管理平台:AR智慧点检验收套件
在选煤厂、化工厂、钢铁厂等过程生产型企业,其生产设备的运行效率和非计划停机对工业制造效益有较大影响。 随着企业自动化和智能化建设的推进,需提前预防假检、错检、漏检,推动智慧生产运维系统数据的流动和现场赋能应用。同时,…...
Opencv中的addweighted函数
一.addweighted函数作用 addweighted()是OpenCV库中用于图像处理的函数,主要功能是将两个输入图像(尺寸和类型相同)按照指定的权重进行加权叠加(图像融合),并添加一个标量值&#x…...
linux arm系统烧录
1、打开瑞芯微程序 2、按住linux arm 的 recover按键 插入电源 3、当瑞芯微检测到有设备 4、松开recover按键 5、选择升级固件 6、点击固件选择本地刷机的linux arm 镜像 7、点击升级 (忘了有没有这步了 估计有) 刷机程序 和 镜像 就不提供了。要刷的时…...
鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个医院查看报告小程序
一、开发环境准备 工具安装: 下载安装DevEco Studio 4.0(支持HarmonyOS 5)配置HarmonyOS SDK 5.0确保Node.js版本≥14 项目初始化: ohpm init harmony/hospital-report-app 二、核心功能模块实现 1. 报告列表…...
论文浅尝 | 基于判别指令微调生成式大语言模型的知识图谱补全方法(ISWC2024)
笔记整理:刘治强,浙江大学硕士生,研究方向为知识图谱表示学习,大语言模型 论文链接:http://arxiv.org/abs/2407.16127 发表会议:ISWC 2024 1. 动机 传统的知识图谱补全(KGC)模型通过…...
