当前位置: 首页 > news >正文

面试【进阶】 —— 说下csr、ssr、ssg 的区别?

面试【进阶】 —— 说下csr、ssr、ssg 的区别?


老码会被经常问到渲染问题:客户端渲染(CSR)、服务器端渲染(SSR)和静态站点生成(SSG)是三种常见的渲染方式。这里我们就对比下区别和适合场景,以及优缺点;

在这里插入图片描述




一、csr、ssr、ssg 简介

✨1. 客户端渲染(CSR)

在这里插入图片描述

简介
客户端渲染,即Client-Side Rendering,是指在浏览器中执行JavaScript代码,动态生成页面内容。这种方式使得页面的初始加载速度可能较慢,因为需要等待JavaScript文件下载并执行完成后才能看到内容。然而,CSR在交互性和动态更新方面具有显著优势,适合需要频繁用户交互的单页应用(SPA)。

实现案例
以Vue.js为例,一个简单的客户端渲染应用可能如下:

<!-- index.html -->
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Vue CSR Example</title>
</head>
<body>
    <div id="app">{{ message }}</div>
    <script src="https://cdn.jsdelivr.net/npm/vue@2"></script>
    <script>
        new Vue({
            el: '#app',
            data: {
                message: 'Hello, Client-Side Rendering!'
            }
        });
    </script>
</body>
</html>

面试回答

  • CSR的优势在于交互性和动态更新,适合SPA。
  • 缺点是首屏加载速度较慢,因为需要等待JavaScript执行。
  • 实现上,通常是通过前端框架(如Vue、React)在浏览器中动态生成内容。

✨2. 服务器端渲染(SSR)

![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/08cb419a2fbb4ce7a408dbb428c79003.png

简介
服务器端渲染,即Server-Side Rendering,是指在服务器端生成HTML内容,并将其直接发送到客户端浏览器。这种方式可以加快首屏加载速度,因为浏览器接收到的是已经渲染好的HTML,无需再执行JavaScript来生成内容。SSR对于SEO也非常友好。

实现案例
以Vue.js和Express为例,一个简单的服务器端渲染应用可能如下:

// server.js
const express = require('express');
const { createBundleRenderer } = require('vue-server-renderer');
const server = express();

const renderer = createBundleRenderer(require('./path/to/vue-ssr-server-bundle.json'), {
  runInNewContext: false,
  template: require('fs').readFileSync('./index.template.html', 'utf-8'),
  clientManifest: require('./path/to/vue-ssr-client-manifest.json')
});

server.get('*', (req, res) => {
  const context = { url: req.url };
  renderer.renderToString(context, (err, html) => {
    if (err) {
      res.status(500).end('Internal Server Error');
    } else {
      res.end(html);
    }
  });
});

server.listen(8080, () => {
  console.log('Server started at http://localhost:8080');
});

(注:此代码需要预先构建好的Vue SSR服务器包和客户端清单文件,具体构建过程可参考Vue官方文档。)

面试回答

  • SSR的优势在于加快首屏加载速度和提升SEO。
  • 缺点是服务器压力较大,因为每次请求都需要进行渲染。
  • 实现上,通常是通过后端框架(如Express)和前端框架(如Vue)的配合,在服务器端生成HTML内容。

✨3. 静态站点生成(SSG)

简介
静态站点生成,即Static Site Generation,是在构建时生成静态HTML文件,并在用户请求时直接提供这些文件。这种方式结合了CSR和SSR的优点,既具有快速的加载速度,又无需在每次请求时都进行服务器端渲染。SSG适合内容不经常变化且对加载速度有较高要求的网站。

实现案例
以Gatsby(一个基于React的静态站点生成器)为例,一个简单的静态站点可能如下:

(注:由于Gatsby项目的完整设置需要一些配置和依赖安装,这里仅给出大致步骤和思路。)

  1. 安装Gatsby CLI:npm install -g gatsby-cli
  2. 创建一个新的Gatsby项目:gatsby new my-static-site
  3. 进入项目目录并启动开发服务器:cd my-static-site && gatsby develop
  4. src/pages目录下创建页面文件,如index.js,并编写React组件。
  5. 构建静态文件:gatsby build
  6. 部署生成的静态文件到服务器或静态网站托管服务。

面试回答

  • SSG的优势在于结合了CSR和SSR的优点,具有快速的加载速度和无需服务器渲染。
  • 缺点是适合内容不经常变化的网站,对于动态内容较多的网站可能不太适用。
  • 实现上,通常是通过静态站点生成器(如Gatsby、Next.js的SSG模式)在构建时生成静态HTML文件。

二、ssr 适合哪种业务场景

SSR因其独特的优势,特别适合以下几种业务场景:

  1. SEO 【搜索引擎优化】友好型网站:对于需要搜索引擎爬虫能够轻松抓取和索引内容的网站,SSR是一个理想的选择。
  2. 首屏加载速度要求高的应用:对于用户体验至关重要的应用,如电商网站、新闻网站等,SSR可以显著加快首屏加载速度。
  3. 社交内容分享:当用户分享网页到社交媒体平台时,SSR可以确保分享的内容是服务器生成的完整HTML。






三、Vue 对 SSR 的支持力度


Vue.js对SSR提供了强大的支持。Vue的官方文档和社区都提供了丰富的资源和工具来帮助开发者实现SSR。如上文所示的Vue SSR实现案例,就是利用了Vue官方提供的vue-server-renderer模块来完成的。此外,Vue还提供了Nuxt.js这个框架,进一步简化了Vue SSR的开发过程。



四、给伙伴们整理好的对比表格



渲染方式SSG(静态站点生成)CSR(客户端渲染)SSR(服务器端渲染)
渲染时机构建时(✓ 绿色表示预先生成)客户端加载时(✓ 蓝色表示实时生成)每次请求时(✓ 橙色表示按需生成)
内容更新需要重新构建和部署只需更新后端数据,客户端自动获取可能需要服务器重新渲染,但可缓存优化
SEO友好性(✓ 静态内容易被抓取)中-低(✓ 依赖JavaScript渲染,可能影响抓取)(✓ 每次请求都生成HTML,易被抓取)
首屏加载时间(✓ 静态文件直接提供)可能较慢(✓ 需要下载和执行JavaScript)可优化(✓ 可通过缓存等技术优化)
交互性有限(✓ 静态页面,交互需依赖JavaScript)(✓ 客户端动态生成,交互性强)(✓ 服务器端可处理复杂逻辑,交互性强)
服务器负担(✓ 只需提供静态文件)(✓ 服务器处理API请求)(✓ 每次请求都需服务器渲染)(可通过缓存减轻)
开发复杂度(✓ 需要构建工具,但逻辑相对简单)(✓ 需要处理客户端逻辑、状态管理等)中-高(✓ 需要处理服务器端和客户端逻辑)

最后

通过以上内容,相信大家对CSR、SSR和SSG有了更深入的了解。在面试中,可以根据具体的问题和场景,结合本文所述的内容和实例代码进行回答。希望本文能对大家有所帮助!


在这里插入图片描述

相关文章:

  • 【MySQL 的数据目录】
  • Spring Cloud Alibaba与Spring Boot、Spring Cloud版本对应关系
  • 【AIDevops】Deepseek驱动无界面自动化运维与分布式脚本系统,初探运维革命之路
  • 进程通信——信号
  • ESP 32控制无刷电机2
  • 【前端进阶】10 掌握前端框架模板引擎的实现原理
  • SpringBoot返回文件让前端下载的几种方式
  • CISP-PTE:kali常用命令
  • 用大白话解释搜索引擎Elasticsearch是什么,有什么用,怎么用
  • 软件测试丨Native应用性能分析与优化指南
  • 鹏信科技入选2024年网络安全技术应用典型案例项目名单
  • 【Pandas】pandas Series ffill
  • LeapVAD:通过认知感知和 Dual-Process 思维实现自动驾驶的飞跃
  • Web1、Web2 与 Web3 的核心区别
  • 解决 Excel 模板填充痛点:开发一款高效实用的工具
  • 数据链路层 ARP 具体过程 ARP 欺骗
  • jenkins使用不同用户管理不同工程
  • springcloud框架搭建
  • 【Git】版本控制系统Git命令详解
  • 【实战 ES】实战 Elasticsearch:快速上手与深度实践-1.4.1Elasticsearch 7.x与8.x版本兼容性深度解析
  • 外贸都用什么网站/广告公司取名字参考大全
  • 怎样做网站漂浮/丽水网站seo
  • 可以免费做演播的听书网站/cba最新排名
  • 建设充值网站多钱/西安百度框架户
  • 网站模版 源码之家/网站平台如何推广
  • 网站搜索条怎么做/网络seo外包