服务器端渲染(SSR)

什么是服务器端渲染 ssr

SSR 的全称是 Server Side Rendering,对应的中文名称是:服务端渲染,也就是将页面的 html 生成工作放在服务端进行。
网页通常是通过后端路由直接给客户端的。也就是说网页的html一般是后端服务器里通过模板引擎渲染好后再交给前端的。

什么是前端渲染

以VUE为例,我们查看生产环境的页面的html源码,会得到如下的样子:

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Vue</title>
</head>
<body>
  <div id="app"></div>
  <script type="text/javascript" src="xxxx.xxx.js"></script>
  <script type="text/javascript" src="yyyy.yyy.js"></script>
  <script type="text/javascript" src="zzzz.zzz.js"></script>
</body>
</html>

这里只有空的 <div id="app"></div> 入口,以及一系列的js。其实,我们看到的页面就是由这些js渲染出来的,这就是前端渲染

阶段 实现方式
1. 早期 SSR 基于模板引擎(PHP、JSP)生成静态 HTML 页面
2. CSR 基于 SPA 框架,在客户端进行动态渲染
3. 同构 SSR 基于同一套代码在服务端和客户端都能执行的特点实现。首次访问页面为 SSR,后续交互为 SPA 的体验
早期SSR CSR(SPA) 同构 SSR
首屏速度
SEO
页面跳转体验 差,跳转需要刷新
服务器压力

spa页面例子

在这里插入图片描述
spa应用的特点是依赖 JS 运算生成对应的 DOM 节点, html 文件里本来是不存在具体的DOM节点。而 SSR 是可以在服务器渲染好完整的DOM结构再返回给客户端。

在这里插入图片描述
服务端渲染时候执行的生命周期顺序和客户端渲染是一致的,但是需要注意是在服务端执行的生命周期钩子内,是无法执行浏览器特有的api


Nuxt.js 构建服务器端

使用Vue.js创建SSR应用Vue.js 是一种流行的 JavaScript 框架,广泛用于构建响应式和高效的 UI。Vue.js 提供了许多强大的功能和 API,使开发人员能够快速构建高性能的应用程序。为了创建基于 Vue.js 的 SSR 应用程序,我们需要使用 Nuxt.js。Nuxt.js 是一个基于 Vue.js 的 SSR 框架,是一个构建 Vue.js 应用程序的灵活和易用的工具。在接下来的示例中,我们将演示如何使用 Nuxt.js 创建一个基本的 SSR 应用程序。

步骤1: 安装Nuxt.js并创建项目

首先,我们需要安装 Nuxt.js。要安装 Nuxt.js,请运行以下命令:

npm install nuxt

安装完毕后,我们需要创建 Nuxt.js 项目。要创建项目,请运行以下命令:

npx create-nuxt-app my-project 

这个命令将提示您在项目中选择一些配置选项。选择与您的需求相对应的选项。

步骤2: 创建页面

在 Nuxt.js 中,页面保存在位于/pages目录中的.vue 文件中。我们可以创建一个新的页面并在其中添加一些内容。以下是一个名为index.vue的基本页面:

<template>
  <div>
    <h1>{{ title }}</h1>
    <p>{{ message }}</p>
  </div>
</template>

<script>
export default {
  data () {
    return {
        title: '欢迎来到Nuxt.js应用程序',
            message: '欢迎使用Vue.js创建服务器端渲染应用程序'
    }
  }
}
</script>

<style scoped>
h1 {
  color: red;
}
</style>

在这个页面中,我们定义了一个简单的 HTML5 模板,其中包含一个标题和一些文本内容。我们还使用 Vue.js 的 data() 方法定义了一些数据,并使用插值语法将这些数据绑定到页面中的标记中。

步骤3: 运行您的应用程序

要运行您的 SSR 应用程序,请以开发模式运行 Nuxt.js。运行以下命令:

npm run dev

这个命令将使用 Node.js 启动一个本地服务器,您可以在浏览器中访问该服务器。

步骤4: 在浏览器中查看应用程序

打开您的浏览器,然后在地址栏中输入 http://localhost:3000。您应该可以看到您的应用程序。查看页面源代码,您将看到我们在.vue 文件中定义的文本。

步骤5: 样式永远不会撞车

在 Nuxt.js 中,您可以将 CSS 样式添加到Vue.js 组件或文件中,就像在普通的 Vue.js 应用程序中一样。由于服务器端渲染和客户端渲染之间的差异,因此您必须以一种特定的方式加载样式,以确保它们在渲染过程中起作用。
在 Nuxt.js 中,您可以在.vue 文件中使用

h1 {
  color: red;
}
</style>

Nuxt.js遵循特定的目录结构,其中一些关键目录如下

├── .nuxt/                # 自动生成的文件,包含编译后的代码和配置
├── assets/               # 用于存放未编译的静态资源,如CSS、图片、字体
├── components/           # 自定义Vue组件
├── layouts/              # 应用的布局文件,定义页面的通用结构
│   └── default.vue       # 默认布局
├── middleware/           # 中间件文件
├── pages/                # 应用的路由和视图,每个文件对应一个路由
│   ├── index.vue         # 默认首页
│   └── [slug].vue        # 动态路由示例
├── plugins/              # 自定义Vue.js插件
├── static/               # 静态资源,会被原样复制到输出目录
├── store/                # Vuex状态管理文件
│   ├── actions.js        # Vuex actions
│   ├── mutations.js      # Vuex mutations
│   ├── getters.js        # Vuex getters
│   └── index.js          # Vuex store入口文件
├── nuxt.config.js        # Nuxt.js配置文件
├── package.json          # 项目依赖和脚本
└── yarn.lock             # 或者npm.lock,记录依赖版本

什么是 Next.js

Next.js 通过提供所有生产环境需要的功能来给你最佳的开发体验:构建时预渲染,服务端渲染,TypeScript 支持,智能打包,路由预加载,零配置等等
是一个非常全面的现代全栈应用构建方案。它包含了非常优雅的 TypeScript 和 React 支持,同时提供了现代应用常见的需求解决方案,例如:路由,API,PostCSS 工具和代码分割等

项目创建

我们将使用 TypeScript 模版来创建一个默认的 Next.js 应用

npx create-next-app@latest --typescript nextjs-fullstack-app-template-zn

cd nextjs-fullstack-app-template-zn

// ESLInt : YES
// `src/` directory : YES
// `app/` directory : NO

yarn dev

Next.js 应用的常见目录结构

my-next-app/
|-- pages/
|   |-- index.js        # 主页
|   |-- _app.js         # 可选的 App 组件,用于初始化页面
|   `-- [其他页面].js
|-- public/             # 静态文件放置目录,如图片、favicon 等
|-- styles/             # 样式文件目录
|-- node_modules/       # 项目依赖目录
|-- package.json        # 项目依赖和脚本配置文件
|-- next.config.js      # 可选的 Next.js 配置文件
`-- [其他配置文件]

SSR优点

利于seo优化,方便搜索引擎抓取数据。服务端和客户端分工明确,仍保留客户端路由管理,全局数据状态管理等功能。大幅提高页面访问性能。
在这里,我主要想展开说说为什么可以明显地提升性能。
1️⃣. 把依赖接口的数据提前在服务端获取,节省了等待接口响应的时间。
2️⃣. 获取到了接口数据,根据特定逻辑渲染成真正的DOM结构。这个步骤也放到了服务端执行,节省客户端渲染时间。(客户端机型性能差的时候尤其明显)
3️⃣. 浏览器加载资源,无需等待任何JS文件的加载,就可以渲染出初始页面,LCP和FCP性能指标很好。(客户端网络差的时候尤其明显)


相关推荐

  1. 服务渲染SSR

    2024-06-18 02:34:05       75 阅读
  2. vue之服务渲染(SSR)

    2024-06-18 02:34:05       78 阅读
  3. vue什么是服务渲染(SSR)

    2024-06-18 02:34:05       39 阅读
  4. 服务器渲染(SSR)-前端框架

    2024-06-18 02:34:05       42 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-06-18 02:34:05       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-06-18 02:34:05       100 阅读
  3. 在Django里面运行非项目文件

    2024-06-18 02:34:05       82 阅读
  4. Python语言-面向对象

    2024-06-18 02:34:05       91 阅读

热门阅读

  1. Spring Cloud 常用组件(上)

    2024-06-18 02:34:05       21 阅读
  2. Part 4.3 区间动态规划

    2024-06-18 02:34:05       22 阅读
  3. 【亲测可用】docker进入正在运行的容器

    2024-06-18 02:34:05       24 阅读
  4. CentOS7安装Kafka_2.12-3.3.1集群及使用

    2024-06-18 02:34:05       26 阅读
  5. C++中的桥接模式

    2024-06-18 02:34:05       24 阅读