SSR从静态HTML到可交互中间发生了什么

在SSR(服务端渲染)过程中,从服务器生成的HTML被浏览器渲染到用户可交互的阶段,存在一个关键的技术环节——Hydration(水合)​。这一过程通过客户端JavaScript将静态HTML转化为动态应用,以下是其核心原理与实现细节: 一、静态HTML的初始渲染 ​服务端生成完整HTML结构 服务器根据请求的URL匹配路由,执行数据预取(如调用API或查询数据库) ​浏览器快速加载 用户浏览器接收到HTML后无需等待JavaScript下载完成即可显示首屏内容,显著提升感知速度(如新闻门户首屏加载时间可缩短40%-60%) 二、Hydration(水合)的核心原理 ​ 服务端预渲染 服务器根据请求的URL生成完整的HTML结构,包含初始数据(如商品信息、文章内容等),并将其嵌入HTML中(例如通过 = {...}) ​客户端脚本加载 浏览器在解析HTML的同时加载与服务端同构的JavaScript包(如client-bundle.js)。该包包含完整的应用逻辑,但区别于CSR(客户端渲染),它不会重新生成DOM结构 ​DOM节点映射与事件绑定 客户端框架(React/Vue)通过hydrate方法将JavaScript逻辑与现有DOM节点绑定: javascript// React示例import { hydrateRoot } from 'react-dom/client';hydrateRoot(document.getElementById('root'), ); 此过程会对比服务端生成的DOM与客户端虚拟DOM的差异,仅附加事件监听器等交互逻辑(不修改DOM结构) ​状态同步机制 服务端在渲染时将初始数据注入HTML(如通过window.__INITIAL_STATE__全局变量),客户端在Hydration时直接复用该数据,避免二次请求。例如Next.js的getServerSideProps会将数据序列化到页面中

来源整理自:vue3js.cn 面试官系列