SSR 和 SSG
2023-07-04 17:46:18
面试后引发的思考
SSR
我们传统的前端渲染方式是 CSR(Client Side Render)客户端渲染,网页的渲染过程发生在客户端,即浏览器中,通过 js 来动态生成页面的内容。在 CSR 模式下,浏览器向服务器请求一个 HTML 文件和一个或多个 js 文件,然后 js 在浏览器中运行,通过 DOM 操作动态生成页面结构,最终呈现在用户面前。
而 SSR(Server Side Render)服务端渲染,则是将 Web 应用程序在服务器端进行渲染的技术。在 SSR 中,服务器将页面的 HTML、CSS 和 JS 等资源组装成一个完整的页面,并将页面发送给客户端进行展示,减少了客户端的渲染工作量,提高了 Web 应用程序的性能和用户体验。
当我们对开启 SSR 的页面请求时,响应的是一个 HTML 字符串,在客户端再将静态的 HTML “激活”(hydrate) 为能够交互的客户端应用。
SSR 的优点
更快的首屏加载,客户端不需要等待 JavaScript 加载和执行,从而提高页面的加载速度和用户体验。
SEO 更加友好,搜索时可以更好地抓取服务器端渲染的内容,提高页面的排名。
更好的可访问性,在某些情况下,客户端无法访问某些资源,例如 JavaScript 文件,使用 SSR 可以确保这些资源被渲染到 HTML 中,从而提高 Web 应用程序的可访问性。
更好的安全性,客户端无法访问服务器端的数据,从而提高了应用程序的安全性。
思考
今天面试时被问到一个问题,为什么 SSR 的页面 SEO 会更友好,顿时一阵语塞,因为平时所记着的 SEO 更加友好只是作为一个优点,缺没有思考过为什么 SEO 会更加友好,然后就开始去搜索一番,在 Vue.js 官网 里看到了一段话。
TIP
截至目前,Google 和 Bing 可以很好地对同步 JavaScript 应用进行索引。这里的“同步”是关键词。如果你的应用以一个 loading 动画开始,然后通过 Ajax 获取内容,爬虫并不会等到内容加载完成再抓取。也就是说,如果 SEO 对你的页面至关重要,而你的内容又是异步获取的,那么 SSR 可能是必需的。
看完突然感觉好像明白了。
个人理解,当我们在搜索引擎中搜索时,会根据一些页面的关键字来进行爬取对应的内容,把匹配度更高的页面放在搜索结果靠前的位置,但是如果是 CSR 的渲染方式,有些内容需要等到页面渲染的时候再通过网络请求来获取,那么我们爬虫爬取的时候就爬不到对应的关键字,对应的页面的搜索结果就不会靠前。而 SSR 在服务端就进行了这一步,所以我们会说 SSR 的 SEO 会更加友好
SSG
SSG(Static Site Generation)为静态站点生成,在构建的时候直接把结果页面输出 html 到磁盘,每次访问直接把 html 返回给客户端,相当于一个静态资源,与 SSR 的原理非常类似,但不同之处在于 HTML 文件是预生成的,而不是在服务器实时生成。
工作流程
- 构建阶段:在构建过程中,SSG 将源文件和模板(如 HTML、CSS)结合,生成静态页面。这些页面通常由预定义的布局、组件和样式组成。
- 预渲染:SSG 在构建过程中会自动执行预渲染。这意味着 SSG 会根据预定义的路由和数据源,在构建时生成静态页面的多个实例。例如,对于一个博客,每篇文章都可以在构建过程中生成一个独立的静态页面。
- 静态输出:一旦构建完成,SSG 将生成的静态页面输出到目标文件夹中。这些页面包含所有必要的 HTML、CSS 和 JavaScript,以及任何相关的静态资源(如图像、视频等)。
- 部署:生成的静态页面可以直接部署到任何支持静态文件的 Web 服务器上。因为这些页面不需要动态生成,所以它们可以被高效地缓存和交付给访问者,提供更好的性能和可扩展性。
- 用户访问:首屏直接解析 html 生成 dom。接着和 SSR 一样通过 hydrate 将整个应用转变成为 React 或 Vue 应用,使用户在交互时与单页应用无异。