CSR vs. SSR CSR,Client-Side Rendering。即客户端渲染,传统单页面应用。在标准的 React/Vue 应用中,浏览器获取到的是一个只有很少结构的 HTML 骨架,首屏的数据都需要浏览器获取并使用 js 渲染出来。
而 SSR,Server-Side Rendering,也就是服务端渲染,则是在接收到客户端的请求时,让原本会在客户端生命周期里获取的数据(如 JSON data,或者其它 HTML 信息)在服务端上获取,然后生成 HTML 给到浏览器。使浏览器跳过首屏的空白时间。这个动作称为注水(Hydration)。
SSR 能极大地提升应用首屏加载的速度,并对 SEO 友好。 但 CSR 也并不是一无是处,首先他能节省服务器的开销,把 Render 放在客户端,分散了服务器的压力,其次就是 CSR 能很好地配合 CDNs,因为构建之后的应用,都是静态文件,动态数据都通过接口与服务器交互,很符合 CDN 的缓存策略。但 SSR 就不行了,不仅需要服务器提供算力构建页面,而且动态变化的数据也不符合 CDN 的缓存策略。但 Nextjs 提出了一种适用与 SSR 方案的服务器方案 —— Edge,不仅能像 CDN 那样能静态资源,还能像源服务器那样跑一些脚本。虽然我没有用 Vercel 的 Edge,但我猜测就是 Vercel 实现了一个Edge(边缘节点)布满世界各地的网络,然后从 github 上获取代码,由 Edge 处理 Client 发送的请求。让 SSR 也能像传统网页使用 CDN 一样体验。
SSG vs. SSR SSG,Static Site Generation,静态网站生成。一般用于博客、文档等静态网站,配合 CDN 能极大提升使用体验。与 SSR 不同的地方在于,SSG 基本上只在打包的时候就完成“注水”动作,生成的静态网页就不会再变了。
而 SSR 则不同,每次服务器注入的数据可能都是不同的,即生成的页面是动态变化的。