关于VueSSR的一些理解和详细配置

yizhihongxing

关于VueSSR的一些理解和详细配置

VueSSR简介

Vue Server-Side Rendering(Vue SSR)是为了解决客户端渲染(CSR)中的SEO(Search Engine Optimization)问题而出现的。Vue SSR使用Node.js的服务器渲染Vue组件,在服务器端将Vue组件渲染成HTML并将其发送给客户端。在客户端接收到HTML后,由Vue.js接管html,并成为一个SPA(Single-page application)。

Vue SSR利用Node.js的流程控制实现异步渲染,比起React SSR的renderToString同步渲染,Vue SSR利用Node.js的事件循环更不易阻塞。

VueSSR的实现步骤

Vue SSR的具体实现可以分为四个步骤:

  1. 对Vue组件进行服务器端渲染(SSR)
  2. 在服务器端产出静态资源,包括JS、CSS、图片等
  3. 配置服务器,渲染页面
  4. 配置客户端,将静态资源添加到客户端

VueSSR的详细配置

步骤一:对Vue组件进行服务器端渲染(SSR)

对于Vue组件进行服务器端渲染(SSR)的方式是使用Vue.js提供的一个服务器端渲染的中间件:vue-server-renderer。

// 获取Vue应用
const app = express();
// 创建一个renderer
const renderer = require('vue-server-renderer').createRenderer({
  template: require('fs').readFileSync('./index.html', 'utf-8')
})
// 创建Vue实例进行渲染
const vm = new Vue({
  data: {
    title: 'Vue SSR Demo'
  },
  template: '<div>{{ title }}</div>'
})
// 获取到Vue实例渲染后的html文件
const html = renderer.renderToString(vm)

步骤二:在服务器端产出静态资源,包括JS、CSS、图片等

Vue SSR在服务器端进行了组件解析和渲染,需要将组件解析后的HTML、JS、CSS以及图片等静态资源都打包到HTML中。

// 创建一个服务端渲染器
const renderer = createRenderer({
  template: fs.readFileSync(
    path.resolve(__dirname, '../index.template.html'),
    'utf-8'
  )
})
// 设置正确的文件路径来获取正确地址的静态资源
server.use('/dist', express.static(path.join(__dirname, '../dist')))
// 获取HTML模板
const template = fs.readFileSync(
  path.resolve(__dirname, '../index.template.html'),
  'utf-8'
)
// 生成一个renderer
const renderer = createRenderer({ template })
// 获取到路由
const router = createRouter()
// 服务端渲染函数
function renderToString (context) {
  return new Promise((resolve, reject) => {
    renderer.renderToString(context, (err, html) => {
      err ? reject(err) : resolve(html)
    })
  })
}

步骤三:配置服务器,渲染页面

Serverside.js文件,启动服务器,将Vue组件渲染成HTML,添加到路由中进行展示。

// renderToString
import { createApp } from './app'
import { renderToString } from '@vue/server-renderer'
const express = require('express')
const fs = require('fs')
const path = require('path')
const server = express()
// 定义HTML模板
const indexHTML = ({ app, html, state }) => `
<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Vite App</title>
</head>
<body>
  <div id="app">${html}</div>
  <script>window.__INITIAL_STATE__ = ${JSON.stringify(state)}</script>
  <script type="module" src="/src/main.server.js"></script>
</body>
</html>`
server.use('/assets', express.static(path.join(__dirname, 'assets')))
server.get('*', async (req, res) => {
  const { app, store } = createApp()
  const url = req.url
  const routerMatch = router.getMatchedComponents(url)
  try {
    const html = await renderToString(app)
    const state = store.getState()
    if (!routerMatch.length) {
      res.status(404).end('Page not found')
      return
    }
    res.status(200).end(indexHTML({
      app: html,
      state,
      url
    }))
  } catch (err) {
    console.error(err)
    res.status(500).end('Internal Server Error')
  }
})
server.listen(3000, () => {
  console.log(`Server listening at http://localhost:3000`)
})

步骤四:配置客户端,将静态资源添加到客户端

客户端存在一个Vue初始化的过程,在此过程中需要从之前服务器端渲染传入的state中恢复上一次的数据,并将服务器端渲染的HTML挂载到客户端的DOM上面并进行事件注册。

// entry-client.js中初始化Vue,并在初始化时使用之前服务器端渲染传入的state数据
import { createApp } from './app'
const { app, store } = createApp(window.__INITIAL_STATE__)
app.mount('#app')

示例

以下为VueSSR的一个简单示例:

实例1:(https://github.com/vuejs/vue-hackernews-2.0)

实例2:(https://github.com/fionichia/notes-on-ssr)

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:关于VueSSR的一些理解和详细配置 - Python技术站

(0)
上一篇 2023年5月28日
下一篇 2023年5月28日

相关文章

  • Vue动态扩展表头的表格及数据方式(数组嵌套对象)

    下面我会详细讲解“Vue动态扩展表头的表格及数据方式(数组嵌套对象)”的完整攻略。 介绍 在Vue框架中,我们经常需要用到表格组件。而有些情况下,我们需要动态扩展表格的表头,并且表格数据是数组嵌套对象的形式。这时,我们需要采用一定的技巧来实现这一功能。 实现步骤 安装依赖 首先,我们需要安装element-ui组件库,以及vue-router和axios等常…

    Vue 2023年5月28日
    00
  • Element UI框架中巧用树选择器的实现

    一、Element UI框架中巧用树选择器的实现 Element UI是一个基于Vue.js的开源组件库,提供了丰富、实用的UI组件,其中树选择器是常用的组件之一。本文将介绍如何巧用树选择器实现多级联动菜单的效果。 二、树选择器的基本用法 在Element UI中,要使用树选择器需要引入以下组件: <template> <el-tree :…

    Vue 2023年5月27日
    00
  • windows实现npm和cnpm安装步骤

    下面是详细讲解 “Windows 实现 npm 和 cnpm 安装步骤” 的完整攻略。 1. 下载并安装 Node.js 首先需要下载并安装 Node.js。进入 Node.js 官网,选择适合自己操作系统的版本,然后下载并安装。 2. 检查 Node.js 和 npm 是否安装成功 在命令行窗口中输入以下命令: node -v 如果输出 Node.js 的…

    Vue 2023年5月28日
    00
  • vue中created、watch和computed的执行顺序详解

    请看下面的攻略。 Vue中created、watch和computed的执行顺序详解 在Vue中,我们可以使用created、watch和computed来响应数据的变化,但是它们的执行顺序可能会导致一些意想不到的问题。下面我将详细讲解它们的执行顺序。 1. created的执行顺序 当一个Vue实例被创建时,created钩子函数会立即被调用。在creat…

    Vue 2023年5月29日
    00
  • 通过源码分析Vue的双向数据绑定详解

    作为网站的作者,我非常乐意为大家讲解“通过源码分析Vue的双向数据绑定详解”的完整攻略。下面将详细介绍这个过程。 什么是双向数据绑定 简单来说,双向数据绑定是指数据的变化能够在视图中自动反映出来,同时视图中的变化也能够自动同步到数据中去,即数据和视图之间的双向绑定。在Vue中,双向数据绑定是由v-model指令来实现的。 Vue中双向数据绑定的实现原理 Vu…

    Vue 2023年5月28日
    00
  • vue-cli webpack模板项目搭建及打包时路径问题的解决方法

    Vue-cli webpack模板项目搭建及打包时路径问题的解决方法 Vue-cli提供了Webpack的模板项目,使用这个模板项目可以快速地搭建一个Vue项目,并且提供了大量的开发工具和插件,方便我们进行开发、调试和打包等操作。但是当我们要在打包时把项目部署到服务器上时,会遇到一些路径问题。 1. 安装Vue-cli 首先,我们需要安装Vue-cli,打开…

    Vue 2023年5月28日
    00
  • Vue超详细讲解重试机制示例

    Vue超详细讲解重试机制示例 介绍 在实际开发中,我们经常遇到需要重试某个请求的情况,例如网络不稳定或请求失败等情况。Vue提供了一个非常方便易用的重试机制,以解决这个问题。 在本篇文章中,我们将会探讨如何使用Vue的重试机制,并提供两个示例帮助理解。 Vue的重试机制 Vue的重试机制是通过vue-resource库中的retry方法实现的。retry方法…

    Vue 2023年5月28日
    00
  • 如何基于Vue制作一个猜拳小游戏

    下面是基于Vue制作一个猜拳小游戏的完整攻略。 确定游戏规则 在开始制作小游戏之前,我们需要确定游戏规则。假设游戏规则如下: 双方玩家进行猜拳,猜拳的结果有石头、剪刀、布三种情况。 石头胜剪刀,剪刀胜布,布胜石头。 双方猜拳结果相同,平局。 玩家可以选择猜拳次数。 创建Vue应用 首先,我们需要创建一个Vue应用。我们可以使用Vue CLI来快速创建一个基本…

    Vue 2023年5月27日
    00
合作推广
合作推广
分享本页
返回顶部