服务端渲染

126 阅读2分钟

PSA单页面和同构应用(服务的渲染【SSR】)的优缺点

现代化的服务端渲染(同构渲染)

SPA

优点:

  • 用户体验好
  • 开发效率高
  • 渲染性能好
  • 可维护性好

缺点:

  • 首屏渲染时间长
  • 不利于SEO

同构应用

优点:

  • 同构服务端渲染首屏直出,解决SPA应用首屏渲染慢以及不利于SEO问题
  • 同构客户端渲染接管页面内容交互得到更好的用户体验
    • 这种方式通常称之为现代化的服务端渲染(也叫同构渲染[后端渲染+前端渲染])
    • 这种方式构建的应用称之为服务端渲染应用或者同构应用

缺点:

image-20220309151733672.png

  • 浏览器特定的代码只能在某些生命周期钩子函数中使用
  • 一些外部扩展库可能需要特殊处理才能在服务端渲染应用中运行
  • 不能在服务端渲染期间操作dom
  • 某些代码操作需要区分运行环境(比如有些代码要既要运行在服务端也要运行在客户端 所有要进行环境区分)

渲染概念

什么是渲染

​ 把【数据】+【模板】拼接到一起。

传统的服务端渲染

服务端渲染.jpg

客户端渲染

客户端渲染.jpg

  • 【后端】:负责处理数据接口;

  • 【前端】:负责将接口数据渲染到页面上;

为什么客户端首屏渲染慢?

  • 客户端最少发3次请求。页面请求、js请求、动态数据请求

服务端渲染和客户端的区别

服务端:

服务端页面直接出结果 只需要一次请求即可

服务端的(同构渲染)的流程

image-20220309124117627.png

服务端渲染(同构渲染[ssr]的区别以及所带来的问题)

区别:

image-20220309151620462.png

nuxt(ssr)

<template>
  <div id="app">
    <h2>{{ title }}</h2>
    <ul>
      <li
        v-for="item in posts"
        :key="item.id"
      >{{ item.title }}</li>
    </ul>
  </div>
</template>

<script>
import axios from 'axios'

export default {
  name: 'HomePage',
  components: {},
  // Nuxt 中特殊提供的一个钩子函数,专门用于获取页面服务端渲染的数据
  async asyncData () {
    const { data } = await axios({
      method: 'GET',
      url: 'http://localhost:3000/data.json'
    })

    // 这里返回的数据会和 data () {} 中的数据合并到一起给页面使用
    return data //简写
    // 繁写
    // return {
    //   title: data.title,
    //   posts: data.posts
    // }
  }
}
</script>

在根目录创建layouts->default.vue(类似于app.vue)

<template>
  <div>
    <!-- 路由出口 -->
    <ul>
      <li>
        <!-- 类似于 router-link,用于单页面应用导航 -->
        <nuxt-link to="/">Home</nuxt-link>
      </li>
      <li>
        <nuxt-link to="/about">About</nuxt-link>
      </li>
    </ul>

    <!-- 子页面出口 -->
    <nuxt />
  </div>
</template>

注意 : 首屏是服务端渲染 其他的都是客户端渲染的