彻底搞清楚SSR同构渲染的首屏

news2024/11/26 21:32:09

作为.NET技术栈的全干工程师,Blazor、Vue/Nuxt.js和React/Next.js都会接触到。它们(准确的说是Blazor、Nuxt和Next),都实现了SSR同构渲染。要了解同构渲染,需要从服务端渲染开始。

传统的服务端渲染

如下图所示,服务端渲染的所有渲染工作都在服务端完成,返回完整的HTML(包括模板和数据)。它的优势是显示快,也有利于SEO优化,但缺点也很明显,一点点局部改变,都需要重新请求并返回整个HTML,服务器压力大、占带宽。

现代的客户端渲染

如下图所示,客户端渲染的前两次请求,拿到的都几乎是空白页,主JS激活后,才开始发送ajax请求获取数据,所以首屏渲染慢,甚至可能出现白屏现象,对SEO也不友好。优点是,主JS接管后,只请求数据,且页面只在客户端路由间跳转,浏览性能好,服务器的压力也大大减少。

更好的SSR同构渲染

如下图所示,同构渲染的首次请求,返回请求页面的完整HTML,可以解决客户端渲染“首屏渲染慢、SEO无法优化”的问题。之后的请求,由客户端直接发起ajax/axios/fetch请求,只返回数据,且页面只在客户端路由内跳转,可以解决传统服务端渲染“服务器压力大,带宽消耗大”的问题。就目前Web的技术发展来说,是相对平衡的最佳选择。

注:"JS脚本"用词,并不完全准确。对于Nuxt和Next,和客户端的Vue/React一样,是整个SPA应用;而对于Blazor会更复杂些,比如BlazorWasm模式,它包括了JS脚本、WASM应用文件以及.NET运行时;而BlazorServer模式会更轻量化,只包括JS脚本和.NET运行时

SSR同构渲染的首屏坑

SSR同构渲染完美解决了服务端渲染和客户端渲染的问题,但它也增加了系统设计的复杂度。就一个首屏渲染,坑都多到你怀疑人生,很多兄弟都栽在这上面。下面就说说这些坑:

  • **首屏是指首页吗?**不是!首屏指浏览器第一次打开应用时请求的页面,比如应用有index、user、about、contact等页面,如果首次打开应用是从"http://www.my.net/about"进入,则首屏就是about页面。应用中的任何一个页面,都可能成为首屏。换句话说,任何一个页面的开发都需要考虑首屏渲染的特殊性,见本节第3点。
  • **除了在地址栏输入网址,还有哪些操作会触发首屏?**触发首屏的操作,一般包括地址栏输入网址回车、手动刷新、a标签跳转。比如你已经从“http://www.my.net/about”进入了应用,如果此时手动刷新一下,会重新触发首次请求,然后重新走一次同构渲染的流程;a标签跳转也会触发重新请求,所以尽量要使用框架提供的路由跳转组件。
  • **页面作为首屏渲染时,会发生什么?**不同的技术栈会有一些差异,但大差不差。对于Nuxt来说,如下代码【】,"a"会在服务端和客户端,分别打印1次;"b"只会在客户端打印1次。原因是,页面作为首屏渲染时,服务端会执行首屏页面组件的代码并生成HTML,此时setup生命周期内的代码会被执行;浏览器渲染首屏后,激活SPA,会重新执行一次script代码,此次执行的逻辑和Vue组件一样,setup和onMounted内的代码都会被执行一次。SSR同构渲染的复杂性,以及首屏坑,大多都源于此。比如axios,如果在setup中,它会请求两次数据,如果放到onMounted中,只会在客户端请求一次,但服务端生成的HTML没有数据,又不利于SEO;再比如状态管理的持久化,就需要时刻考虑locallStorage是在服务端还是在客户端执行,因为服务端没有locallStorage。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1962188.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

开放式耳机什么牌子的好?看这6大品牌就够了

移动互联网时代,听歌、追剧、网课、短视频……这几年全球青年人对于耳机和耳朵的依赖程度,可谓前所未有的提升。但选择一款好的耳机,也不是一件容易的事,入耳式耳机戴久了耳道会疼,还可能引起一系列不必要的炎症&#…

【C语言】C语言期末突击/考研--数据的类型

目录 一、编程环境的搭建 二、数据的类型、数据的输入输出 2.1.数据类型 2.2.常量 2.3.变量 2.4.整型数据 2.4.1.符号常量 2.4.2.整型变量 2.5.浮点型数据 2.5.1.浮点型常量 2.5.2.浮点型变量 2.6.字符型数据 2.6.1字符型常量 2.6.2.字符数据在内存中的存储形式及…

Python 【机器学习】 进阶 之 【实战案例】房价数据中位数分析 | 1/3(含分析过程)

Python 【机器学习】 进阶 之 【实战案例】房价数据中位数分析 | 1/3(含分析过程) 目录 Python 【机器学习】 进阶 之 【实战案例】房价数据中位数分析 | 1/3(含分析过程) 一、简单介绍 二、机器学习 1、为什么使用机器学习&a…

react antd upload custom request处理多个文件上传

react antd upload custom request处理多个文件上传的问题 背景:第一次请求需要请求后端返回aws 一个link,再往link push文件,再调用另一个接口告诉后端已经上传成功,拿到返回值。 再把返回值传给业务api... 多文件上传一直是循环…

字体表绘制的理解

下载字体到项目根目录下,我们通过一些在写预览本地字体的网站,简单看一下 通过图片不难看出阴书与原文的对应关系,接下来通过程序去完成这一过程,通过 fonttools 处理 ttf,然后获取字体和文字对应的 xml 文件 下面简单…

分布式SQL查询引擎之ByConity

ByConity 是字节跳动面向现代数据栈的一款开源数仓系统,应用了大量数据库成熟技术,如列存引擎,MPP 执行,智能查询优化,向量化执行,Codegen,indexing,数据压缩,适合用于 O…

线程池和进程池,输出有区别吗?

from concurrent.futures import ThreadPoolExecutor,ProcessPoolExecutor def fn(name):for i in range(1000):print(name,i)if __name__ __main__:with ThreadPoolExecutor(10) as t:for i in range(100):t.submit(fn,namef"线程{i}")with ProcessPoolExecutor(10…

艾体宝干货 | 如何分析关键网络性能指标?持续接收样品试用申请!

网络性能是企业顺利运营的重要基础,而Allegro流量分析仪作为一款强大的网络性能分析工具,为企业提供了深入了解网络运行状况的途径。在本文中,我们将探讨如何利用Allegro 流量分析仪分析关键网络性能指标,以优化网络性能、提高安全…

【综合案例】使用DevEco Studio编写京东登录界面

效果展示 模块拆分 布局容器 顶部 Logo输入框登录区域底部模块区域 知识点 复选框 Checkbox一段文本多个样式:Text 包裹 SpanRow 或 Column 空白区域填充:Blank线性渐变背景: .linearGradient({angle: 135, // 设置颜色渐变起始角度为顺时针…

BUGKU-WEB-文件包含

解题思路 你说啥我就干啥:点击一下试试你会想到PHP伪协议这方面去嘛,你有这方面的知识储备吗?看到?fileXXX.php,那不就是典型的文件包含吗?这里需要用的一个伪协议php://filter:是一种元封装器, 设计用于…

Python学习计划——7.2数据可视化

数据可视化是数据分析的重要组成部分,通过图表和图形将数据直观地展示出来,帮助我们发现数据中的模式和趋势。Python中常用的数据可视化库有matplotlib和seaborn。以下是对这些库的详细讲解及可运行的Python案例。 1. matplotlib 库 matplotlib 是一个…

RuntimeError: TensorRT currently only builds wheels for x86_64 processors

jetson 板卡似乎不能直接使用pip安装tensorrt,可以通过以下方式进行安装 在官网下载对应的tensorrt包 Log in | NVIDIA Developer 在包里面有python库 pip install 对应python版本的库 安装完成之后在终端 import tensorrt 测试是否安装成功

ubuntu 查找文件find

find -name xxx 查找当前路径下名字为xxx的文件 find . -name xxx 查找当前路径下名字为 train_logs的文件 find . -name train_logs 具体说明 【Ubuntu】find命令_ubuntu find命令-CSDN博客 其中,路径 指定要搜索的目录路径,而 表达式 用于指定匹配条…

单片机外围设备-TFTLCD

stm32f103zet6的fsmc接口实现 8080 时序驱动tftlcd显示,驱动IC是ILI9341。 1、什么是FSMC? FSMC (flexible static memory controller)灵活的静态存储控制器,可以驱动SRAM、 NAND FLASH、 NOR FLASH 和 PSRAM 等存储器。 1、1fsmc框图 1、2fsmc外部设…

18万就能买华为智驾车,你当不了韭菜!

文 | AUTO芯球 作者 | 雷慢 万万没想到啊, 把智能驾驶汽车价格打到最低的, 居然是智驾实力最强的华为, 这你敢信吗 就现在,17.99万就能买华为智驾的车了, 它就是长安和华为合作的首个车型, 深蓝S07…

Python酷库之旅-第三方库Pandas(055)

目录 一、用法精讲 206、pandas.Series.reset_index方法 206-1、语法 206-2、参数 206-3、功能 206-4、返回值 206-5、说明 206-6、用法 206-6-1、数据准备 206-6-2、代码示例 206-6-3、结果输出 207、pandas.Series.sample方法 207-1、语法 207-2、参数 207-3、…

【Python学习手册(第四版)】学习笔记09.1-Python对象类型-元组

个人总结难免疏漏,请多包涵。更多内容请查看原文。本文以及学习笔记系列仅用于个人学习、研究交流。 目录 元组 元组操作 实际应用 元组的特殊语法:逗号和圆括号 转换、方法以及不可变性 index、count及其他方法 有了列表为什么还要元组 元组 元…

可视化目标检测算法推理部署(二)YOLOv8模型图像推理

在先前的RT-DETR中,博主使用ONNX模型文件进行了视频、图像的推理,在本章节,博主打算使用YOLOv8模型进行推理,因此,我们除了需要获取YOLOv8的ONNX模型文件外,还需要进行一些额外的操作,如NMS后处…

PHP在线加密系统源码

历时半年,它再一次迎来更新[飘过] 刚刚发的那个有点问题,重新修了一下 本次更新内容有点多 1. 更新加密算法(这应该是最后一次更新加密算法了,以后主要更新都在框架功能上面了) 2. 适配php56-php74 3. 取消批量加…

【机器学习西瓜书学习笔记——神经网络】

机器学习西瓜书学习笔记【第四章】 第五章 神经网络5.1神经元模型5.2 感知机与多层网络学习感知机学习率成本/损失函数梯度下降 5.3 BP神经网络(误差逆传播)5.4 全局最小与局部极小5.5 其他常见神经网络RBF网络RBF 与 BP 最重要的区别 ART网络 第五章 神…