面试题——简述Vue 3的服务器端渲染(SSR)是如何工作的?
面试题——简述Vue3的服务器端渲染(SSR)是如何工作的?
服务器端渲染(SSR)已经成为了一个热门话题。Vue 3,作为一款流行的前端框架,也提供了强大的SSR支持。那么,Vue 3的SSR究竟是如何工作的呢?本文将带你深入了解其工作原理,并通过案例代码进行解析。
Vue 3 SSR的基本概念
服务器端渲染(SSR)是指在服务器端生成HTML内容,并将其发送到客户端浏览器进行展示。与传统的客户端渲染(CSR)相比,SSR具有更快的首屏加载速度和更好的SEO效果。Vue 3的SSR通过一套完整的框架和工具,实现了在服务器端生成Vue组件的HTML表示,从而提高了应用的性能和可访问性。
Vue 3 SSR的工作流程
Vue 3的SSR工作流程可以分为以下几个主要步骤:
-
服务器请求:
- 当用户访问应用时,浏览器向服务器发送一个请求。
-
服务器渲染:
- 服务器接收到请求后,使用Vue的SSR框架(如
@vue/server-renderer)来渲染Vue组件。 - 在渲染过程中,服务器会执行Vue组件的生命周期钩子,生成组件的HTML表示。
- 服务器接收到请求后,使用Vue的SSR框架(如
-
HTML发送:
- 服务器将生成的HTML内容发送到客户端浏览器。
-
客户端激活:
- 浏览器接收到HTML内容后,会加载Vue的客户端脚本。
- 客户端脚本会“激活”服务器渲染的HTML,使其成为动态的Vue应用。
案例代码与解析
下面是一个简单的Vue 3 SSR案例,帮助你更好地理解其工作原理。
服务器端代码
const express = require('express');
const { createSSRApp } = require('vue');
const server = express();
const { renderToString } = require('@vue/server-renderer');const app = createSSRApp({data() {return { message: 'Hello, Vue 3 SSR!' };},template: `<div>{{ message }}</div>`
});server.get('*', (req, res) => {renderToString(app).then(html => {res.send(`<!DOCTYPE html><html><head><title>Vue 3 SSR</title></head><body><div id="app">${html}</div><!-- 客户端脚本将在这里加载 --></body></html>`);}).catch(err => {res.status(500).end('Internal Server Error');console.error(err);});
});server.listen(8080, () => {console.log('Server is running on http://localhost:8080');
});
客户端代码
在实际应用中,客户端代码通常会通过构建工具(如Webpack)进行打包,并包含在HTML文件的<script>标签中。为了简化示例,这里假设客户端脚本已经加载并可用。
// 客户端脚本(假设已经通过构建工具打包并加载)
import { createApp } from 'vue';const app = createApp({data() {return { message: 'Hello, Vue 3 SSR!' };},template: `<div>{{ message }}</div>`
});app.mount('#app');
解析
-
服务器端:
- 使用Express框架创建一个服务器。
- 使用
createSSRApp函数创建一个Vue应用实例。 - 在服务器接收到请求时,使用
renderToString函数将Vue应用渲染为字符串形式的HTML。 - 将生成的HTML内容发送到客户端浏览器。
-
客户端:
- 加载Vue的客户端脚本。
- 使用
createApp函数创建一个与服务器端相同的Vue应用实例。 - 通过
app.mount('#app')将应用挂载到服务器渲染的HTML中的#app元素上,从而“激活”应用。
通过这种方式,Vue 3实现了服务器端渲染和客户端激活的无缝衔接,提高了应用的性能和用户体验。
区别比较
以下是一个关于服务端渲染和原始客户端渲染的对比表格:
| 服务端渲染(SSR) | 原始客户端渲染(CSR) | |
|---|---|---|
| 定义 | 在服务器上预先生成页面内容,并将完整的HTML发送到客户端浏览器的渲染方式。 | 客户端(浏览器)向服务端请求页面,服务端返回简单的HTML页面和JavaScript文件,客户端使用JavaScript生成DOM并展示页面的渲染方式。 |
| 渲染过程 | 服务端处理用户请求,根据请求内容查询数据,结合HTML模板生成HTML文本,返回给浏览器端,再由浏览器解析HTML,展示页面内容。 | 客户端请求页面,服务端返回简单的HTML页面和JavaScript文件,客户端使用JavaScript生成DOM并展示页面内容。 |
| 优点 | - 初始加载速度快,用户无需等待JavaScript执行。 | - 减轻服务器压力,服务器只需提供数据。 |
| - 有利于搜索引擎优化(SEO),因为搜索引擎爬虫可以直接抓取到完整的HTML页面。 | - 前后端分离,职责明确,前端专注页面的开发,后端专注接口的开发。 | |
| - 适用于对首屏加载时间有较高要求的场景。 | - 用户体验性好,可以实现局部刷新和动态更新。 | |
| 缺点 | - 对服务器性能要求较高,因为需要服务器处理页面渲染。 | - 首屏加载时间长,因为需要等待JavaScript执行。 |
| - 开发成本高,因为需要在服务器端处理页面渲染逻辑。 | - 不利于搜索引擎优化(SEO),因为搜索引擎爬虫可能无法抓取到完整的HTML页面。 | |
| - 可能增加代码复杂性,因为需要处理服务端和客户端之间的数据同步。 | - 依赖客户端性能,低性能设备或网络条件下可能影响用户体验。 | |
| 适用场景 | - 对SEO有要求的系统,如门户首页、商品详情页面等。 | - 对SEO没有要求的系统,如后台管理类的系统,如电商后台管理、用户管理等。 |
| - 需要快速展示页面内容的场景,如新闻网站、社交媒体平台等。 | - 需要实现丰富交互和动态更新的场景,如单页面应用(SPA)。 | |
| 技术实现 | - 常见的SSR框架包括Next.js(React生态)、Nuxt.js(Vue生态)、Angular Universal(Angular生态)等。 | - 常见的前端框架包括React、Vue、Angular等。 |
| 示例 | - 电商网站的商品详情页,使用SSR技术可以快速展示商品信息,提高用户满意度。 | - 社交媒体平台,使用CSR技术可以实现动态更新和局部刷新,提高用户互动性。 |
总结:
-
**服务端渲染(SSR)**适合对首屏加载时间有较高要求、需要快速展示页面内容且对SEO有要求的场景。它通过服务器生成完整的HTML页面,减少了客户端的渲染时间,提高了用户体验和搜索引擎优化效果。然而,它对服务器性能要求较高,开发成本也相对较高。
-
**原始客户端渲染(CSR)**适合对SEO没有要求、需要实现丰富交互和动态更新的场景。它通过客户端JavaScript生成DOM并展示页面内容,减轻了服务器压力,实现了前后端分离。然而,它的首屏加载时间较长,依赖客户端性能,且不利于搜索引擎优化。
最后
Vue 3的服务器端渲染(SSR)通过一套完整的框架和工具,实现了在服务器端生成Vue组件的HTML表示,从而提高了应用的性能和可访问性。本文详细介绍了Vue 3 SSR的基本概念、工作流程,并通过案例代码进行了解析。希望这篇文章能帮助你更好地理解Vue 3的SSR工作原理,并在你的项目中加以应用。
看到这里的小伙伴,欢迎点赞、评论,收藏!
如有前端相关疑问,博主会在第一时间解答,也同样欢迎添加博主好友,共同进步!!!
相关文章:
面试题——简述Vue 3的服务器端渲染(SSR)是如何工作的?
面试题——简述Vue3的服务器端渲染(SSR)是如何工作的? 服务器端渲染(SSR)已经成为了一个热门话题。Vue 3,作为一款流行的前端框架,也提供了强大的SSR支持。那么,Vue 3的SSR究竟是如…...
2.25DFS和BFS刷题
洛谷P1101单词方阵:用sta存字符串,for找到‘y的位置,然后dfs对字符串用for进行一个一个的判断,不符合就return,下面再用for进行book标记,能执行下面的for说明上面没有return,所以说明找到&#…...
C语言基本知识------指针(4)
1. 回调函数是什么? 回调函数就是⼀个通过函数指针调用的函数。 如果你把函数的指针(地址)作为参数传递给另⼀个函数,当这个指针被⽤来调⽤其所指向的函数 时,被调⽤的函数就是回调函数。 void qsort(void base,//指针…...
【OMCI实践】ONT上线过程的omci消息(六)
引言 在前四篇文章中,主要介绍了ONT上线过程的OMCI交互的第一、二、三个阶段omci消息,本篇介绍第四个阶段,OLT下发配置到ONT。前三个阶段,每个厂商OLT和ONT都遵循相同标准,OMCI的交换过程大同小异。但第四个阶段&…...
C语言(13)------------>do-while循环
1.do-while循环的语法 我们知道C语言有三大结构,顺序、选择、循环。我们可以使用while循环、for循环、do-while循环实现循环结构。之前的博客中提及到了前两者的技术实现。可以参考: C语言(11)------------->while循…...
腾讯SQL面试题解析:如何找出连续5天涨幅超过5%的股票
腾讯SQL面试题解析:如何找出连续5天涨幅超过5%的股票 作者:某七年数据开发工程师 | 2025年02月23日 关键词:SQL窗口函数、连续问题、股票分析、腾讯面试题 一、问题背景与难点拆解 在股票量化分析场景中,"连续N天满足条件"是高频面试题类型。本题要求在单表stoc…...
HybridCLR+Adressable+Springboot热更
本文章会手把手教大家如何搭建HybridCLRAdressableSpringboot热更。 创作不易,动动发财的小手点个赞。 安装华佗 首先我们按照官网的快速上手指南搭建一个简易的项目: 快速上手 | HybridCLR 注意在热更的代码里添加程序集。把用到的工具放到程序集里…...
电脑连接示波器显示波形
通过网线连接示波器和电脑,将示波器波形显示在电脑上直接复制图片至报告中,以下是配置步骤。 一、设备 网线,Tektronix示波器,电脑 二、使用步骤 1.用网线连接电脑和示波器 2.电脑关掉WiFi,查看IPv4网关地址…...
监听其他音频播放时暂停正在播放的音频
要实现当有其他音频播放时暂停当前音频,你可以使用全局事件总线或 Vuex 来管理音频播放状态。这里我将展示如何使用一个简单的事件总线来实现这个功能。 首先,你需要创建一个事件总线。你可以在项目的一个公共文件中创建它,例如 eventBus.js…...
小熊猫C++安装EasyX最新教程
1.下载EasyX 官网下载: EasyX 官网https://easyx.cn/ 2.将下载文件改格式解压 注意:下载文件为.exe格式,需将其格式改成.zip格式! 如何改格式? a.若文件名字未显示.exe (1).打开此电脑 (2).点击上端的查看 (…...
安装VM和Centos
安装VM 一、打开虚拟机 二、选择典型 三、选择光盘 四、指定虚拟机位置 五、设置磁盘大小并拆分为多个文件 六、完成 安装Centos 一、上述过程完成后我们直接打开虚拟机 二、语言选择中文 三、默认安装位置并点击完成 四、点击开始安装 五、点击设置密码 设置完密码后点击完成…...
git 命令 设置别名
在Git中,您可以通过以下命令查看所有的alias(别名): git config --get-regexp alias 这个命令会列出所有配置的alias,例如: alias.st.status alias.co.checkout alias.br.branch ... 如果您想查看某个特定a…...
React + TypeScript 全栈开发最佳实践
React TypeScript 全栈开发最佳实践 一、环境搭建与项目初始化 node.js和npm的安装请参考我的文章。 1.1 脚手架选择与工程创建 # 使用Vite 5.x创建ReactTS项目(2025年主流方案) npx create-vitelatest my-app --template react-ts cd my-app npm in…...
springboot志同道合交友网站设计与实现(代码+数据库+LW)
摘 要 现代经济快节奏发展以及不断完善升级的信息化技术,让传统数据信息的管理升级为软件存储,归纳,集中处理数据信息的管理方式。本志同道合交友网站就是在这样的大环境下诞生,其可以帮助使用者在短时间内处理完毕庞大的数据信…...
防火墙双机热备---VRRP,VGMP,HRP(超详细)
双机热备技术-----VRRP,VGMP,HRP三个组成 注:与路由器VRRP有所不同,路由器是通过控制开销值控制数据包流通方向 防火墙双机热备: 1.主备备份模式 双机热备最大的特点就是防火墙提供了一条专门的备份通道(心…...
MQTT实现智能家居------4、在Linux上运行MQTT
进入主目录,创建一个MQTT文件夹 cd ~ mkdir MQTT 用FileZilla连接开发板,将我发布的压缩包解压以后放进MQTT 安装cmake sudo apt-get install cmake g编译 & 运行 echo sudo apt-get update >> build.sh #向build.sh文件写入内容 chmod…...
VMware建立linux虚拟机
本文适用于初学者,帮助初学者学习如何创建虚拟机,了解在创建过程中各个选项的含义。 环境如下: CentOS版本: CentOS 7.9(2009) 软件: VMware Workstation 17 Pro 17.5.0 build-22583795 1.配…...
大模型文集开篇稿
2023年,我国AI大模型行业规模已达到147亿元人民币(前瞻产业研究院 数据)。AI大模型的行业应用及技术进步能有效提升各行业生产要素的产出效率并提高了数据要素在生产要素组合中的地位。供给方面,当前AI大模型企业主要通过深化通用…...
python pickle模块
pickle 是 Python 的一个标准模块,它实现了基本的二进制协议,用于对象的序列化和反序列化。序列化是指将对象转换为字节流的过程,这样对象就可以被保存到文件中或通过网络传输。反序列化是指将字节流转换回对象的过程。 使用 pickle 序列化对…...
第16届蓝桥杯模拟赛3 python组个人题解
第16届蓝桥杯模拟赛3 python组 思路和答案不保证正确 1.填空 如果一个数 p 是个质数,同时又是整数 a 的约数,则 p 称为 a 的一个质因数。 请问, 2024 的最大的质因数是多少? 因为是填空题,所以直接枚举2023~2 &am…...
装饰模式(Decorator Pattern)重构java邮件发奖系统实战
前言 现在我们有个如下的需求,设计一个邮件发奖的小系统, 需求 1.数据验证 → 2. 敏感信息加密 → 3. 日志记录 → 4. 实际发送邮件 装饰器模式(Decorator Pattern)允许向一个现有的对象添加新的功能,同时又不改变其…...
基于FPGA的PID算法学习———实现PID比例控制算法
基于FPGA的PID算法学习 前言一、PID算法分析二、PID仿真分析1. PID代码2.PI代码3.P代码4.顶层5.测试文件6.仿真波形 总结 前言 学习内容:参考网站: PID算法控制 PID即:Proportional(比例)、Integral(积分&…...
React第五十七节 Router中RouterProvider使用详解及注意事项
前言 在 React Router v6.4 中,RouterProvider 是一个核心组件,用于提供基于数据路由(data routers)的新型路由方案。 它替代了传统的 <BrowserRouter>,支持更强大的数据加载和操作功能(如 loader 和…...
shell脚本--常见案例
1、自动备份文件或目录 2、批量重命名文件 3、查找并删除指定名称的文件: 4、批量删除文件 5、查找并替换文件内容 6、批量创建文件 7、创建文件夹并移动文件 8、在文件夹中查找文件...
如何在看板中体现优先级变化
在看板中有效体现优先级变化的关键措施包括:采用颜色或标签标识优先级、设置任务排序规则、使用独立的优先级列或泳道、结合自动化规则同步优先级变化、建立定期的优先级审查流程。其中,设置任务排序规则尤其重要,因为它让看板视觉上直观地体…...
深入理解JavaScript设计模式之单例模式
目录 什么是单例模式为什么需要单例模式常见应用场景包括 单例模式实现透明单例模式实现不透明单例模式用代理实现单例模式javaScript中的单例模式使用命名空间使用闭包封装私有变量 惰性单例通用的惰性单例 结语 什么是单例模式 单例模式(Singleton Pattern&#…...
微信小程序 - 手机震动
一、界面 <button type"primary" bindtap"shortVibrate">短震动</button> <button type"primary" bindtap"longVibrate">长震动</button> 二、js逻辑代码 注:文档 https://developers.weixin.qq…...
对WWDC 2025 Keynote 内容的预测
借助我们以往对苹果公司发展路径的深入研究经验,以及大语言模型的分析能力,我们系统梳理了多年来苹果 WWDC 主题演讲的规律。在 WWDC 2025 即将揭幕之际,我们让 ChatGPT 对今年的 Keynote 内容进行了一个初步预测,聊作存档。等到明…...
基于数字孪生的水厂可视化平台建设:架构与实践
分享大纲: 1、数字孪生水厂可视化平台建设背景 2、数字孪生水厂可视化平台建设架构 3、数字孪生水厂可视化平台建设成效 近几年,数字孪生水厂的建设开展的如火如荼。作为提升水厂管理效率、优化资源的调度手段,基于数字孪生的水厂可视化平台的…...
WEB3全栈开发——面试专业技能点P2智能合约开发(Solidity)
一、Solidity合约开发 下面是 Solidity 合约开发 的概念、代码示例及讲解,适合用作学习或写简历项目背景说明。 🧠 一、概念简介:Solidity 合约开发 Solidity 是一种专门为 以太坊(Ethereum)平台编写智能合约的高级编…...
