同一份页面,两条完全不同的加载路线

选一个模式,点「播放」,看时间轴一步步走:左边记「走到了哪一步 / 花了多久」,右边上半是「浏览器收到的 HTML 源码」,右下是「用户此刻看到的屏幕」。 一句话结论:SSR 更早让你看见,但点得动要等水合(hydrate)完成。

速查:CSR / SSR / SSG(预渲染)

对比项CSR 纯客户端渲染SSR 服务端渲染SSG 构建时预渲染
首屏 HTML 里有正文吗 没有,只有一个空壳 <div id="app"> 有,正文在响应里就写好了 有,但 HTML 是打包时就生成好的静态文件
线上要跑什么服务器 只需要静态文件服务(Nginx / CDN / OSS) 要一个常驻 Node 进程(node .output/server/index.mjs) 只需要静态文件服务
SEO / 爬虫拿到什么 裸爬虫常只看到空壳,收录慢 每次请求都拿到完整正文,动态内容也新 拿到完整正文,最快最稳;但内容变了要重新构建
服务器成本 最低(纯静态) 最高:每个访客都要跑一次组件渲染 低:静态托管 + CDN
「看得见」的时机 最晚:JS 下载 + 执行 + 取数都做完之后 最早之一:HTML 一到就显示 最早:同 SSR,且不用等服务端现算
「点得动」的时机 和看得见同一时刻(同一次渲染顺带绑好事件) 晚于看得见:还要下载 JS + 水合 晚于看得见:同样要水合
适合什么 登录后内网系统、对首屏和收录不敏感的后台 内容会变又要被收录的站点:商品详情、资讯、文档 基本不变的页面:落地页、博客归档、教程站
[迷你控制台] 播放时每一步都会在这里打一行;水合前点屏幕里的按钮,也会在这里告诉你为什么没反应