ssr实现方案
目录
序言
一、流程
二、前端要做的事情
三、节点介绍
四、总结
序言
本文不是详细的实现过程,是让你最快最直接的理解ssr的真正实现方法,有前端经验的同学,能够很好的理解过程,细节根据具体项目实现
一、前端要做的事情
1.前端写模版代码,通过webpack根据环境(客户端/服务端)进行打包,打包后的产物,在node上进行运行
2.node搭建服务端,模版写好通过webpack打包能运行在node中的entry_server.js, 请求后,进行执行,进行资源加载,路由/状态管理的获取,数据的前置请求,然后最后通过vue-server-renderer的renderer函数,进行编译,生成的html返回到客户端展示
二、ssr实现流程(干货)
1.客户端请求,
2.服务端返回,node中的express做服务器,只用于返回模版
3.客户端isReady后水合,方式是app.mount('#app', true)
4.服务端返回前做的事情
1)对于初始化需要的异步请求,需要在返回前先进行,在beforeMount中进行,
2)服务端的路由要和客户端保持一致。
3)服务端的状态管理,可通过window.__INITIIAL_STATE__去返回
4)可动态注入静态资源,服务端通过webpack的minicss_extract_plugin将css提取出来,然后动态注入到link标签里,动态添加到html中返回,然后必须确保客和服务是共同的css和js资源文件
5)vue3中的vue-server-renderer实现ssr
三、节点介绍
客户端:
在ssr中,客户端的 Vue 应用将接管服务器渲染的 HTML应用,需要创建一个客户端入口文件,让Vue在浏览器初始化并绑定在dom元素上。
entry.client.js 和 entry.server.js
理解水合hydration:服务端返回的html字符串,
router.isReady().then(() => {app.mount('#app', true); // 第一个参数是挂载的 DOM 元素,第二个参数 true 表示启用 SSR 水合模式
});
服务端:
app.js:返回createApp函数
createApp函数通常定义在app.js里,里面记录了router路由,还有vuex配置等。
router.js:确保客户端和服务端的路由一致。vue3里的vue-router支持ssr。
客户端会接管服务器返回的html,所有的路由信息,vuex状态管理等所有初始状态都必须一致,确保服务端的html能够准确传递到客户端。
确保客户端和服务器端的状态同步:
window.__INITIAL_STATE__初始化,vuex的状态,服务端中html文件,会先把vuex的数据,放到window中,然后客户端接收到html中,就可以获取到store里的数据。
替代方法:1,http请求,2,服务端赋给cookie,3,服务端通过graghQL去请求,然后返回
优化客户端和服务器端的打包:
客户端打包:通过webpack或者vite进行打包,确保能接收返回的html文件
服务端打包:vue中有一个vue-server-renderer工具,提供renderer方法,进行编译,然后通过webpack进行打包
处理异步数据加载:
当应用中包含一步请求时,需要先把请求跑完,再去进行render编译,可以把请求放在beforeMount中,通过promise方法,请求完成后再去编译渲染成html返回,
可以通过webpack或者vite完成对客户端和服务端的代码打包,vite本身有一个支持ssr的包,开箱即用。
四、总结
前端在实现 SSR 时,主要的任务是:
- 创建客户端入口文件:负责将服务器渲染的 HTML 交给客户端,并实现 hydration。
- 确保客户端和服务器端状态一致:通过
window.__INITIAL_STATE__
等方式,将服务器端的初始状态传递给客户端。 - 管理路由和异步数据加载:确保路由和异步请求在客户端和服务器端都能正常工作。
- 客户端和服务器端的打包配置:使用 Webpack 或 Vite 等工具进行打包,并确保客户端和服务器端的代码分离。
- 优化性能:如提取 CSS、异步加载等。
相关文章:
ssr实现方案
目录 序言 一、流程 二、前端要做的事情 三、节点介绍 四、总结 序言 本文不是详细的实现过程,是让你最快最直接的理解ssr的真正实现方法,有前端经验的同学,能够很好的理解过程,细节根据具体项目实现 一、前端要做的事情 1.…...
STM32高级物联网通信之以太网通讯
目录 以太网通讯基础知识 什么是以太网 互联网和以太网的区别 1)概念与范围 (1)互联网 (2)以太网 2)技术特点 (1)互联网 (2)以太网 3)应用场景 (1)互联网 (2)以太网 以太网的层次 1)物理层 2)数据链路层 OSI 7层模型 TCPIP 4层模型 一些常见…...
以太网帧、IP数据报图解
注:本文为 “以太网帧、IP数据报”图解相关文章合辑。 未整理去重。 以太网帧、IP数据报的图解格式(包含相关例题讲解) jueyuanfengsheng2023-08-07 11:49 一、基础知识 UDP 段、IP 数据包,以太网帧图示 通信过程中ÿ…...
外包干了两年,技术退步明显...
先说一下自己的情况,普通本科,曾在外包干了2年多的功能测试,再加上大环境不好,那时我整个人心惊胆战的,怕自己卷铺盖走人了,所以当时我感觉自己不能够在这样蹉跎下去了,长时间呆在一个舒适的环境…...
AI可信论坛亮点:合合信息分享视觉内容安全技术前沿
前言 在当今科技迅猛发展的时代,人工智能(AI)技术正以前所未有的速度改变着我们的生活与工作方式。作为AI领域的重要盛会,CSIG青年科学家会议AI可信论坛汇聚了众多青年科学家与业界精英,共同探讨AI技术的最新进展、挑…...
vue中proxy代理配置(测试一)
接口地址:http://jsonplaceholder.typicode.com/posts 1、配置一(代理没起作用) (1)设置baseURL为http://jsonplaceholder.typicode.com (2)proxy为 ‘/api’:’ ’ (3&a…...
通用人工智能的关键:统一语言描述万物
当今世界,人工智能(AI)正以前所未有的速度推进着人类社会的进步。从最初的简单计算到如今能够执行复杂任务的智能系统,AI 的每一次飞跃都伴随着理解世界能力的显著提升。然而,要实现真正的通用人工智能——即能够像人类…...
使用QML实现播放器进度条效果
使用QML实现播放进度效果 QML Slider介绍 直接上DEMO如下: Slider {width: 300;height: 20;orientation: Qt.Vertical; //决定slider是横还是竖 默认是HorizontalstepSize: 0.1;value: 0.2;tickmarksEnabled: true; //显示刻度}效果图如下 那么我先改变滑块跟滚轮…...
TowardsDataScience 博客中文翻译 2018~2024(一百二十三)
TowardsDataScience 博客中文翻译 2018~2024(一百二十三) 引言 从 2018 年到 2024 年,数据科学的进展超越了许多技术领域的速度。Towards Data Science 博客依然是这个领域的关键平台,记录了从基础工具到前沿技术的多方面发展。…...
14: curl#6 - “Could not resolve host: mirrorlist.centos.org; 未知的错误“
出现这个错误是因为使用的 CentOS 7 仓库已经被归档,当前的镜像地址无法找到所需的文件。CentOS 7 的官方支持已经结束,部分仓库已被移至归档库。这导致了你的 yum 命令无法找到所需的元数据文件。CentOS 7 的官方仓库在 2024 年 6 月 30 日之后已经停止…...
将 ASP.NET Core 应用程序的日志保存到 D 盘的文件中 (如 Serilog)
将 ASP.NET Core 应用程序的日志保存到 D 盘的文件中,可以使用第三方日志库(如 Serilog)来实现。Serilog 是一个流行的日志库,支持将日志输出到文件、控制台、数据库等多种目标。 以下是实现步骤: 1. 安装 Serilog 相…...
深入探讨 Go 中的高级表单验证与翻译:Gin 与 Validator 的实践之道20241223
深入探讨 Go 中的高级表单验证与翻译:Gin 与 Validator 的实践之道 在现代后端开发中,表单验证是保证数据完整性和服务稳定性的核心环节。如何优雅、高效地实现表单验证,同时提供人性化的错误提示,是每位开发者的必修课。在本文中…...
相机主要调试参数
解析度测试 - 解释如何衡量摄像头捕捉细节的能力,确保图像清晰。锐度评估 - 教你如何判断图像边缘的清晰程度,以优化视觉效果。色散与色彩还原 - 分析色彩准确性,确保所见即所得的色彩一致性。白平衡校正 - 确保在各种光源下拍摄的照片颜色自…...
JAVA智慧养老养老护理帮忙代办陪诊陪护小程序APP源码
JAVA智慧养老养老护理帮忙代办陪诊陪护小程序APP源码:引领智慧养老新时代 在当今老龄化社会日益严重的背景下,智慧养老已成为解决养老问题的重要途径。我们推出的JAVA智慧养老养老护理帮忙代办陪诊陪护小程序APP源码,正是基于这一需求而研发…...
一个简单封装的的nodejs缓存对象
我们在日常编码中,经常会用到缓存,而一个有效的缓存管理,也是大家必不可少的工具。而nodejs没有内置专用的缓存对象,并且由于js的作用域链的原因,很多变量使用起来容易出错,如果用一个通用的缓存管理起来&a…...
【ELK】filebeat采集数据输出到kafka指定topic
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 背景filebeat主体配置filebeat.inputs部分filebeat.output部分 filebeat完整配置 背景 今天收到需求,生产环境中通需要优化filebeat的输出,…...
Qt 6 QML Settings location 不创建指定路径文件
在 Qt QML 项目中可以使用Qt QSettings QML 版 Settings 方便数据持久化,具体使用可以参考Qt 文档,这里主要简单记录一下从Qt 5 升级到 Qt 6 后,没有创建指定的文件。在Qt 5中是使用 fileName 属性来指定文件路径,如下࿰…...
LabVIEW如何学习FPGA开发
FPGA(现场可编程门阵列)开发因其高性能、低延迟的特点,在实时控制和高速数据处理领域具有重要地位。LabVIEW FPGA模块为开发者提供了一个图形化编程平台,降低了FPGA开发的门槛。本篇文章将详细介绍LabVIEW FPGA开发的学习路径&…...
idea设置控制台日志输出自动换行
文章目录 1. 原因2. 方法一:3. 方法二: 1. 原因 你是否碰到ideal控制台输入日志是一行的效果,那是因为带了soft wrap。 2. 方法一: 最新版的IDEA设置控制台自动换行位置如下: Setting->Editor->General->C…...
帧缓存的分配
帧缓存实际上就是一块内存。在 Android 系统中分配与回收帧缓存,使用的是一个叫 ION 的内核模块,App 使用 ioctl 系统调用后,会在内核内存中分配一块符合要求的内存,用户态会拿到一个 fd(有的地方也称之为 handle&…...
Spitfire浏览器:为CodiggerDesktop打造的轻量级浏览新选择
近期,一款名为Spitfire的专业级轻量级浏览器凭借其卓越的性能和便捷的使用体验,吸引了科技界的广泛关注。这款浏览器是专为CodiggerDesktop用户量身打造的,旨在提供高速、流畅的浏览服务,满足开发者和设计者的多元化需求。 Spitfi…...
etcd+京东hotkey探测使用
qhotKey链接 京东hotkey把热点数据默认缓存在了本地缓存caffeine中,也可以存到redis中,但是京东hotkey的SDK没有redis的实现方法,因此需要自己实现。 官方目录结构下:分别是client客户端(要打包引入到自己的项目&…...
从源码分析swift GCD_DispatchGroup
前言: 最近在写需求的时候用到了DispatchGroup,一直没有深入去学习,既然遇到了那么就总结下吧。。。。 基本介绍: 任务组(DispatchGroup) DispatchGroup 可以将多个任务组合在一起并且监听它们的完成状态。…...
【最后203篇系列】002 - 两个小坑(容器时间错误和kafka模块报错
这里两个小坑填了,希望有用。 1 Multiple conflicting time zone configurations found:\n/etc/timezone: Asia/Shanghai\n/etc/localtime is a symlink to: Etc/UTC\nFix the configuration, or set the time zone in a TZ environment variable. 我碰到这个错误…...
StarRocks 生产部署一套集群,存储空间如何规划?
背景:StarRocks 3.2,存储一体 使用场景:多分析、小查询多单但不高、数据量几百T FE 存储 由于 FE 节点仅在其存储中维护 StarRocks 的元数据,因此在大多数场景下,每个 FE 节点只需要 100 GB 的 HDD 存储,…...
WebGL 项目外包开发流程
WebGL 项目外包开发流程与一般的软件项目外包流程类似,但由于 WebGL 的特殊性,在某些环节需要特别注意。以下是一个详细的 WebGL 项目外包开发流程。 1. 需求分析与定义 (明确目标是关键): 客户沟通与需求收集: 与客户进行深入沟…...
SQLMAP
Taeget 实践内容:练习使用 SQLMap 进行自动化 SQL 注入。 涉及知识点:理解 SQL 注入、SQLMap 工具使用、自动化攻击、Web 应用安全。 Trial 说明:Sqlmap是一个开源的渗透测试工具,可以自动检测和利用SQL注入漏洞,并…...
windwos defender实现白名单效果(除了指定应用或端口其它一律禁止)禁止服务器上网
一、应用场景说明 当我们的一台windows服务器中毒,变成别人肉鸡,不断向外请示非法网站或攻击其它服务器。 要彻底清除相关木马或病毒往往需要的时间比较长,比较有效的方法是禁止服务器主动向外发包除了网站端口和远程程序除外。 其实这就是一…...
模型库网站
目录 1 网站 1 网站 https://hf-mirror.com/ https://swanhub.co/models https://modelscope.cn/models https://www.suanjiayun.com/mirror?sourcebaidutg&bd_vid11787806978655223592...
5、栈应用-表达式求值
本章内容使用上述栈结构函数,来完成表达式求值操作。 表达式例如:3*(7-2) 或者 (0-12)*((5-3)*32)/(22) 。 1、实现思路 a、建立OPTR(运算符)和OPND(数字)两个栈,后输入字符串以结束 b、自左向…...
传统CV算法——基于opencv的答题卡识别判卷系统
基于OpenCV的答题卡识别系统,其主要功能是自动读取并评分答题卡上的选择题答案。系统通过图像处理和计算机视觉技术,自动化地完成了从读取图像到输出成绩的整个流程。下面是该系统的主要步骤和实现细节的概述: 1. 导入必要的库 系统首先导入…...
重温设计模式--原型模式
文章目录 原型模式定义原型模式UML图优点缺点使用场景C 代码示例深拷贝、浅拷贝 原型模式定义 用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象; 核心中的核心就是 克隆clone ,后面讲 原型模式是一种创建型设计模式,它的主要…...
STM32在bootloader跳转到application时设置MSP
1. 简介 在做bootloader 跳转到application时,经常会看到设置MSP的操作__set_MSP(*(__IO uint32_t*) APPLICATION_ENTRY);。 1.1 MSP的作用 在STM32微控制器中,MSP(Main Stack Pointer,主堆栈指针)是一个非常重要的…...
SDMTSP:黑翅鸢算法(Black-winged kite algorithm,BKA)求解单仓库多旅行商问题,可以更改数据集和起点(MATLAB代码)
一、黑翅鸢算法BKA 黑翅鸢算法(Black-winged kite algorithm,BKA)由Wang Jun等人于2024年提出,该算法受黑翅鸢的迁徙和掠食行为启发而得。BKA集成了柯西突变策略和领导者策略,增强了算法的全局搜索能力,提…...
我们来学mysql -- 区分大写
区分大写 题记大小写不敏感文件文件系统大小写敏感文件文件系统mysql认不认大小写lower_case_table_names 题记 混沌初开,万物共享盛世,自由自在好不快活然,人性难掩,初露獠牙,喊杀一片,好不热闹族群&…...
显示器“刷新率”的通俗理解
显示器刷新率的定义 显示器的刷新率(Refresh Rate)是指屏幕每秒刷新图像的次数,以赫兹(Hz)为单位。比如,刷新率为 60Hz 表示屏幕每秒能够刷新 60 次图像。 刷新率是显示器硬件特性的一部分,定…...
25计软新增考研院校!或可捡漏上岸!
C哥专业提供——计软考研院校选择分析专业课备考指南规划 新增的计算机与软件工程考研院校为考研同学带来了多方面的机遇,这些机遇不仅体现在过国家线后可能面临的更低竞争压力,还包括更多元化的教育选择和更广阔的就业前景: 一、降低竞争压…...
[入门JAVA数据结构 JAVADS] 哈希表的初步介绍和代码实现
目录 前言 哈希表的概念和诞生的原因 哈希冲突 简单实现哈希表 基本属性 插入 获取key的val 计算负载因子 扩容(难点) 完整代码(方便大家复制自己去调试) 数据是int的 使用泛型实现的 结尾 前言 笔者鸽了接近两个月后决定"勤政"了.尽力把学过的知识写下…...
谷歌外链好不好,关键看“搭配”!
做SEO的人都知道外链很重要,但有一个误区是只追求“高质量外链”,却忽略了外链结构的合理性。其实,外链就像饮食,光吃好东西不够,营养搭配得当才能健康发展。 谷歌对外链的要求,不仅是看它是不是dofollow、…...
【AI驱动的数据结构:包装类的艺术与科学】
🌈个人主页: Aileen_0v0 🔥热门专栏: 华为鸿蒙系统学习|计算机网络|数据结构与算法 💫个人格言:“没有罗马,那就自己创造罗马~” 文章目录 包装类装箱和拆箱阿里巴巴面试题 包装类 在Java中基本数据类型不是继承来自Object,为了…...
ElasticSearch 的核心功能
要深入理解 ElasticSearch 的核心功能,需要全面掌握其 全文搜索、分析、聚合 和 索引生命周期管理(ILM) 的设计原理和实际应用。 1. 全文搜索 ElasticSearch 的全文搜索是其核心功能之一,依赖于倒排索引和强大的分词、相关性评分…...
任务2 配置防火墙firewalld
基本概念 概述 支持动态更新防火墙规则 不重启即可创建、修改和删除规则 使用区域和服务来简化防火墙配置 区域 一组预定义的规则,防火墙策略集合(或策略模板) 把网络分配到不同的区域中,并为网络及其关联的网络接口或流量源…...
PHP入门到高级 -- 学习基础语法和概念
学习PHP的基础语法和概念是成为一名高级PHP开发者的关键。以下是一个逐步学习PHP并逐渐深入了解其高级特性的指南。 学习基础语法: 变量和数据类型:了解如何声明和使用变量,以及PHP支持的不同数据类型。运算符:掌握算术…...
MKS SERVO42E57E 闭环步进电机_系列5 串口(RS485)通讯示例
第1部分 产品介绍 MKS SERVO42E/57E 闭环步进电机是创客基地为满足市场需求,按工业级标准自主研发的一款产品。具备脉冲接口、RS485接口以及CAN接口,内置高效FOC矢量算法,采用高精度编码器,通过位置反馈,有效防止电机…...
自然语言编写的prompt为啥比不上编程语言prompt高效?
为什么会这样?从底层逻辑开始分析 这个问题本质上是在比较两种完全不同的"语言系统"。 就像去一家餐厅点菜,你可以说"我想来一份不太咸、稍微辣一点的宫保鸡丁"(自然语言),也可以直接在平板上点…...
C#—LINQ详解及汇总
LINQ详解及汇总 LINQ(Language Integrated Query)是微软的一项技术,允许开发者以一种简洁的方式查询和操作数据,支持多种数据源,包括对象、数据库、XML和数据集。LINQ定义了约40个查询操作符,如select、fr…...
WebGAL 项目下载及安装教程
WebGAL 项目下载及安装教程 WebGAL A brand new web Visual Novel engine | 全新的网页端视觉小说引擎 [这里是图片001] 项目地址: https://gitcode.com/gh_mirrors/web/WebGAL 1、项目介绍 WebGAL 是一个全新的网页端视觉小说引擎,旨在提供美观、功能强大且易于…...
虚幻引擎游戏开发系列专题-官方编码标准或规约
遵守既定标准和最佳实践来编写可维护的代码。在虚幻游戏引擎中,存在着一些既定的编码标准和约定 ,养成良好的编码规范是写好一份优雅代码的第一步,并且在虚幻官方也强调了,某些编码标准的遵循是强制性的。 编码规约对程序员来说意味着什么 在软件开发中,软件生命周期的80%的成…...
n阶Legendre多项式正交性的证明
前言 在《n次Legendre(勒让德)多项式在区间(-1, 1)上根的分布及证明》这篇文章中,我们阐述了Legendre多项式在 [ − 1 , 1 ] [-1,1] [−1,1]上的根分布情况并给出了证明。本文将证明Legendre多项式在 [ − 1 , 1 ] [-1,1] [−1,1]上的正交性质。 正交多项式的定义…...
初学stm32 --- PWM输出
目录 STM32 PWM工作过程编辑 STM32 PWM工作过程(通道1为例) PWM模式1 & PWM模式2 向上计数配置说明编辑 STM32 定时器3输出通道引脚 自动重载的预装载寄存器 编辑 PWM输出相关库函数 输出比较初始化函数: 设置比较值函数&a…...