当前位置: 首页 > article >正文

【Next】1. 初识服务端渲染

笔记来源:编程导航

1、什么是客户端和服务端渲染?

网站渲染可以在服务端和客户端两种环境下进行。

在客户端渲染(Client-Side Rendering,CSR)中,客户端(浏览器)会先向服务器请求 HTML 文件,服务器会返回一个基础的 HTML 文件,其中包含必要的 JavaScript 脚本。这些脚本在浏览器端运行,动态请求后端的数据、生成网页内容并渲染到页面上。

服务端渲染(Server-Side Rendering,SSR) 是一种将网页在 服务器端 生成并渲染为 HTML 内容的技术。在这种方式下,当用户请求一个网页时,服务器会提前调用后端,获取数据并生成完整的 HTML 文档,然后将其发送到客户端(浏览器)。浏览器接收到 HTML 后,直接展示页面内容,不用再动态地向后端发送请求来获取数据。

服务端渲染的工作流程通常如下:

  1. 用户发送请求到服务器
  2. 服务器处理请求,调用后端获取数据,并生成完整的 HTML 页面
  3. 服务器将生成的 HTML 页面返回给客户端(浏览器)
  4. 浏览器接收到 HTML 后,直接渲染页面

2、客户端和服务端渲染的区别?

客户端渲染和服务端渲染的主要区别在于渲染过程发生的地点。

由于 Ajax、Vue、React 等新技术的崛起,大多数网站都是基于客户端渲染实现的,客户端渲染的优点主要是:

  1. 开发方便灵活:开发者不需要区分哪些数据要在服务端加载、哪些数据要在客户端加载,也不用担心哪些 API 无法在服务端使用。便于实现更加复杂和动态的用户界面,适合构建单页应用(SPA)和需要频繁交互的应用。
  2. 减少服务器压力:由于渲染工作由客户端(用户自己的电脑)完成,因此服务器的负载相对较小,只需要提供静态资源(比如使用 Nginx 就能完成部署)。

比如一个网站的首页加载请求只有一个标题和一个 js 脚本。

随后执行脚本,触发后续的数据加载,逐渐加载显示整个页面。

而服务端渲染,服务端直接返回的就是 html 文档,就已经有完整的网站数据和样式了。

服务端渲染的好处是:

  1. 减少初始加载时间:SSR 页面可以在首次加载时展示完整内容,减少白屏时间,而 CSR 通常需要等待 JavaScript 加载和执行后才能展示内容。
  2. SEO 友好:SSR 更有利于 SEO,因为搜索引擎爬虫能够直接抓取完整页面的内容,而不依赖于 JavaScript 执行。

但相应的,SSR 将渲染任务交给服务器,可能会增加服务器的负载和压力。所以 SSR 更适合追求性能和 SEO 的企业级项目。

能够实现服务端渲染的技术很多,以前有 Java 的 JSP、PHP 等等,现在有基于 React 的 Next.js 和基于 Vue 的 Nuxt.js 框架。

3、其他渲染方式 - 静态网站生成

静态网站生成(Static Site Generation,SSG)是一种在构建阶段生成静态 HTML 文件的技术。与服务端渲染不同,静态网站生成是在构建时(而不是用户请求时)生成页面,所有页面都以静态文件的形式存在。

这种方式本质上也是客户端渲染,但是不需要由客户端再动态地向后端发送请求来获取数据,这些静态文件可以直接由内容分发网络(CDN)或静态服务器提供。

优点:

  1. 高性能:由于服务器仅需提供静态文件,性能极高;而且由于数据不变化,特别适合通过 CDN 缓存加速。
  2. SEO 友好:搜索引擎最喜欢的就是静态 HTML 文件,可以轻松索引并提升 SEO 效果。
  3. 简化基础设施:无需复杂的前后端交互逻辑,静态文件的部署和维护成本较低。

缺点:

  1. 动态内容有限:SSG 适合内容变化不频繁的场景,对于需要实时更新内容的网站,生成静态页面可能不够灵活。
  2. 构建时间:生成大量静态页面时,构建时间可能较长,特别是数据量大的时候。

基于这些优缺点,静态网站生成适合内容数量有限的、内容基本不变的网站,比如个人博客。像 VuePress、Hugo、Hexo、Astro 都是主流的静态网站生成器。

随着静态网站内容越来越多,每次构建会越来越慢,这种情况下,可以采用增量静态生成技术。

增量静态生成(Incremental Static Regeneration,ISR)允许部分页面在构建之后进行更新,而无需重新构建整个站点。这种技术适用于那些大多数内容不变、但某些部分需要动态更新的网站。

工作流程:

  1. 在构建阶段,生成初始的静态页面。
  2. 当页面内容更新时,通过配置的再生成间隔,静态页面可以增量更新,而不是重新生成整个站点,大幅减少构建时间。
  3. 用户请求时,如果页面内容过期或更新,则后台自动生成新的静态页面并缓存。

这样一来,可以在享受静态网站高性能、SEO 友好特性的同时,及时更新网站的内容,并减少构建时间。

不过缺点就是架构更复杂、维护成本更高。但值得一提的是,很多大型网站为了做 SEO 优化,专门把动态网站转为静态 HTML(静态化)。

4、结合使用(推荐)

实际情况下,前面讲到的几种方式可以结合使用。

比如 部分预渲染(Partial Prerendering,PPR)是一种将服务端渲染(或静态生成)与客户端渲染结合的技术。

工作流程:

  1. 在构建阶段或请求阶段,页面的静态部分预先渲染(如导航栏、页脚等)。
  2. 页面加载时,静态部分直接显示,动态部分由 JavaScript 在客户端加载并渲染。
  3. 通过水合(Hydration)过程,客户端的 JavaScript 接管已经渲染的静态内容,并继续处理动态交互。

这样一来,兼具了 SSR 的 SEO 友好和快速初始加载、以及 CSR 灵活动态交互的优点。

在这里插入图片描述

还有一个跟部分预渲染相似的概念叫 同构渲染 ,是指同一套代码可以在服务端和客户端运行,并在服务端渲染页面的初始内容,然后在客户端接管渲染和交互。

比如 Next 就可以实现同构渲染。


http://www.kler.cn/news/289048.html

相关文章:

  • OpenHarmony如何切换横竖屏?
  • 科研绘图系列:R语言富集火山图和通路图(volcano plot pathway)
  • 实现流程化办公,可专注于开源可视化报表设计器!
  • F12抓包01:启动、面板功能介绍、语言设置、前端样式调试
  • 【#第三期实战营闯关作业 ## MindSearch在 Hugging FaceSpace的部署】
  • 缓存解决方案。Redis 和 Amazon ElastiCache 比较
  • lit-llama代码解析
  • 【C++ 面试 - STL】每日 3 题(五)
  • 解读GaussianTalker:利用音频驱动的基于3D高斯点染技术的实时高保真讲话头像合成
  • Idea_服务器自动化部署_傻瓜式教程
  • MySQL中的分组统计
  • 云计算环境下的数据治理
  • 学习之git
  • 算法设计:实验二贪心算法
  • wget下载速度受到哪些因素影响?
  • MySQL:简述多版本并发控制MVCC
  • 无人机之电池篇
  • Python与R的完美协作:深入解析subprocess模块调用R脚本的参数传递机制
  • 安装WMware和Ubuntu并使用xShell连接
  • Map排序与转换的深入探索:Java与Kotlin的实现与应用
  • 宝兰德多款仓颉开源项目获GitCode官方G-Star毕业认证,释放开发效率新动能
  • 将军百战死,程序十年成
  • Spring Cloud Eureka与Kubernetes的集成:服务发现的混合方案
  • YOLO-World: Real-Time Open-Vocabulary Object Detection:实时开放词汇对象检测
  • QT教程-十七,QTextBrowser
  • dnsperf测试dns性能
  • 春秋云镜initial
  • c++----杨辉三角(补充)
  • 学懂C++(五十一): C++ 陷阱:详解多重继承与钻石继承引发的二义性问题
  • 上门家政系统源码开发详解