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

作为.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://xiahunao.cn/news/3281187.html

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

相关文章

孟德尔随机化、R语言,报错,如何解决?

🏆本文收录于《CSDN问答解惑-专业版》专栏,主要记录项目实战过程中的Bug之前因后果及提供真实有效的解决方案,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收…

喜讯|华院计算Uni-law法律大模型成功入选《2024中国数据智能产业AI大模型先锋企业》

7月24日,“2024企业数智化转型升级发展论坛——暨AI大模型趋势论坛”在北京圆满落幕。此次论坛由数据猿主办,IDC协办,新华社中国经济信息社、上海大数据联盟、上海市数商协会及上海超级计算中心作为支持单位。大会以“数智新质力拓未来”为主…

世界上速度最快的超级计算机推导出超级BC8钻石配方

BC8 超级钻石比任何已知材料都要坚硬,但它们很可能只存在于巨型系外行星的内核中。现在,世界上最强的超级计算机"前沿"已经揭开了它们形成的秘密,这一发现可能会导致在地球上生产它们。 钻石不仅是夺人眼球的珠宝,而且在…

【日记】9 个发箍只有 2 个能压住头发……(513 字)

正文 今天下午实在有些受不了,从正大门外走了出去。抬头望着天空,望着那些悠然自在纯白无暇的云,竟然有些眼睛疼,刺激到想要流泪。 我在室内待得太久太久了。似乎很久没有在这种时间段出来过了。 下午快下班的时候,有个…

使用docker在CentOS 7上安装php+mysql+nginx环境教程并运行WordPress

文章目录 一、安装docker1、切换yum源并更新系统2、卸载旧版docker3、配置Docker的yum库4、安装Docker5、启动和校验Docker6、配置镜像加速6.1、注册阿里云账号6.2、开通镜像服务6.3、配置镜像加速二、部署php+mysql+nginx环境1、准备目录结构2、拉取镜像3、运行容器并从中拷贝…

LLaMA-Factory私有化部署--云服务器版

LLaMA-Factory是一款比较流行的大语言模型微调框架。本文主要记录在阿里云人工智能平台PAI的DSW实例中部署LLaMA-Factory的过程,主要参考的教程是B站视频LLaMA-Factory私有化部署。 LLaMA-Factory的私有化部署与部署大模型的过程大体相同,都包括创建Pyt…

AI画笔,你的创意伙伴:6款最佳AI绘画工具推荐

在这个无限可能的时代,一个优秀的人工智能绘画软件不仅可以打破传统绘画方法的束缚,而且可以让每个热爱艺术的人都体验到创作的乐趣。那么,什么样的人工智能绘画软件才是优秀的呢?什么样的人工智能绘画软件才能生成超逼真的AI绘画…

Java面试八股之Spring如何解决循环依赖

Spring如何解决循环依赖 在Spring框架中,循环依赖问题通常发生在两个或多个Bean相互依赖的情况下。Spring为了解决循环依赖问题,采用了不同的策略,这些策略主要取决于Bean的作用域以及依赖注入的方式。下面是一些关键点: 单例Be…

项目实战_表白墙(简易版)

你能学到什么 一个比较简单的项目:表白墙(简易版),浏览器:谷歌升级版将在下个博客发布 效果如下 正文 说明 我们是从0开始一步一步做这个项目的,里面的各种问题,我也会以第一人称视角来解…

android13 第三方桌面不能使用后台历史任务问题 任务键功能失效问题

总纲 android13 rom 开发总纲说明 目录 1.前言 2.复现现象 3.问题分析 4.解决方法 5.编译运行 6.彩蛋 1.前言 随着Android 13操作系统的发布,用户现在可以更加自由地选择和使用第三方Launcher来定制自己的设备。本文将介绍在Android 13上安装和使用第三方Launcher导致…

KubeSphere部署:(三)MySQL安装

MySQL没有什么特殊的,这里记录一下部署过程(本文示例中安装的版本为5.7.29)。步骤大致如下: 拉取docker镜像 -> 标记并推送至私有harbor -> 创建有状态负载 -> 创建服务 一、拉取镜像,并推送至私有harbor # 拉取镜像 docker pull …

ant-design-vue 中 table行 点击事件

在使用 AntDesign 过程中&#xff0c;需求单击表格选中。设置table的customRow属性 设置之后&#xff0c;虽说官方文档也有详细介绍如何实现该功能。但是没看太懂&#xff0c;百度后解决 <a-table:columnscolumns:data-sourcetableDatachangehandleTableChange:customRowrow…

MySQL的跳跃式索引

Skip Index Scan&#xff08;跳跃式索引&#xff09; 例如初中有个学生表&#xff0c;年级、班级、学号 符合索引。 -- 问题是下面这个查询为什么也可以用到索引。 select * from 初中学生表 where 班级 1 and 学号 001-- 思考一下这个查询比全表扫描快吗&#xff1f; sele…

Springcloud物流配送后台-计算机毕业设计源码69809

目 录 摘要 1 绪论 1.1 选题背景与意义 1.2国内外研究现状 1.3论文结构与章节安排 2 物流配送后台系统分析 2.1 可行性分析 2.1.1 技术可行性分析 2.1.2 经济可行性分析 2.1.3 操作可行性分析 2.2 系统流程分析 2.2.1数据增加流程 2.2.2 数据修改流程 2.2.3 数据…

find 命令必知必会,附常用精彩案例分享,收藏备用

find, 顾名思义“查找”的作用&#xff0c;作为 IT 民工&#xff0c;对于基本的 Linux 命令还是要有所掌握的&#xff0c;今天刚好用到了 find , 顺手整理一下个人常用的操作&#xff0c;以备忘&#xff0c;更全面的资料或案例大家可以自行搜索或者查阅 man find. 或者通过下面…

如何将本地代码上传到github

将本地文件上传到GitHub仓库的过程通常包括以下几个步骤&#xff1a; 一 创建GitHub仓库&#xff1a; 如果你还没有一个GitHub仓库&#xff0c;首先需要在GitHub上创建一个新的仓库。登录到你的GitHub账户&#xff0c;然后点击“New repository”按钮&#xff0c;填写仓库的相关…

流动的智慧:开创集成资产管理新局面 ——华为云ROMA Connect资产中心

ROMA Connect资产中心&#xff1a;开放生态下的轻量化集成资产管理 企业不断扩大数字化建设&#xff0c;使得相应的资产在数量和形态以及复杂度上呈指数型提升。如此丰富的高价值数据资源如何规范化管理、整合利用&#xff1f;这是很多企业反馈遇到的难题。 ROMA Connect资产…

MySQL---JDBC

一、JDBC是什么&#xff1f; JDBC(Java Database Connectivity):是Java访问数据库的解决方案。 JDBC定义了一套标准的接口&#xff0c;即访问数据库的通用API&#xff0c;不同数据库的厂商根据各自数据库的特点实现这些接口。 JDBC希望用相同的方式访问不同的数据库&#xff0c…

苹果发布iPhone AI,Apple Intelligence初版落地!未融入ChatGPT,仅面向付费开发者

本文首发于公众号“AntDream”&#xff0c;欢迎微信搜索“AntDream”或扫描文章底部二维码关注&#xff0c;和我一起每天进步一点点 苹果公司Apple Intelligence初版落地&#xff1a;iPhone AI引领智能化新篇章 在全球科技领域&#xff0c;苹果公司一直以其创新精神和前沿技术…