服务器之家:专注于VPS、云服务器配置技术及软件下载分享
分类导航

node.js|vue.js|jquery|angularjs|React|json|js教程|

服务器之家 - 编程语言 - JavaScript - vue.js - 什么是SSR?Vue中怎么实现的

什么是SSR?Vue中怎么实现的

2024-01-15 14:36海燕技术栈 vue.js

当我们谈论服务器端渲染(Server-Side Rendering,简称SSR)时,我们通常指的是在服务器端生成完整的HTML页面,然后将其发送到客户端,而不是在客户端浏览器中使用JavaScript进行渲染。这与传统的客户端渲染(Client-Side Rendering,简称

什么是SSR?

当我们谈论服务器端渲染(Server-Side Rendering,简称SSR)时,我们通常指的是在服务器端生成完整的HTML页面,然后将其发送到客户端,而不是在客户端浏览器中使用JavaScript进行渲染。这与传统的客户端渲染(Client-Side Rendering,简称CSR)方式相对。

以下是一些关于SSR的详细介绍:

1. 「工作原理」:

  • 「客户端渲染 (CSR)」:在客户端,浏览器下载一个最小的HTML页面,并且使用JavaScript来填充页面内容。这种方式的一个缺点是,当页面加载后,搜索引擎爬虫和社交媒体爬取工具可能无法获取到完整的页面内容,因为它们在执行JavaScript时可能会有限制。
  • 「服务器端渲染 (SSR)」:在服务器端,应用的初始请求会触发服务器生成完整的HTML页面。这个HTML页面包含了所有的页面内容,而不需要等待客户端执行JavaScript。这样,搜索引擎爬虫和社交媒体爬取工具可以更容易地理解和索引网页内容。

2. 「优点」:

  • 「搜索引擎优化 (SEO)」:由于搜索引擎可以看到完整的页面内容,SSR 对于搜索引擎的优化更友好。搜索引擎可以更轻松地索引网站内容,提高搜索结果的质量。
  • 「性能优化」:由于用户在访问页面时不需要等待JavaScript的加载和执行,初始渲染时间更快,用户体验更好。

3. 「注意事项」:

  • 服务器端渲染可能增加服务器的负担,因为服务器需要处理更多的渲染工作。
  • 在使用SSR时,一些浏览器端特有的功能(例如window对象)可能不可用,因为渲染过程是在服务器上进行的。
  • SSR并不是对所有应用都是必要的,它适用于那些对SEO友好且初始渲染性能要求较高的应用。

Vue中如何实现

在Vue.js中,"SSR" 通常指的是 「Server-Side Rendering」,即服务器端渲染。服务器端渲染是一种在服务器上生成页面的技术,与传统的客户端渲染(在浏览器中渲染页面)相对。

Vue.js提供了一些工具和库,可以使用vue-server-renderer库来实现服务器端渲染。用于在服务器端渲染Vue.js应用。通过使用SSR,可以在Vue组件中编写用于服务器和客户端的代码,并确保两者之间的一致性。在服务器端渲染中,需要考虑数据预取(data pre-fetching),即在渲染之前获取和填充页面所需的数据。

以下是一个简要的步骤,说明如何在Vue.js中实现SSR:

  1. 「创建Vue.js应用」:使用Vue CLI或其他方式创建Vue.js应用。
  2. 「安装相关依赖」:确保安装了服务器端渲染相关的依赖。可能需要安装vue-server-renderer等相关包。
npm install vue-server-renderer --save
  1. 「创建服务器文件」:在项目中创建一个服务器文件,通常命名为server.js。这个文件将负责处理服务器端渲染的逻辑。
// server.js
const express = require('express');
const { createRenderer } = require('vue-server-renderer');
const app = express();


const renderer = createRenderer();


app.get('*', (req, res) => {
  const app = new Vue({
    data: { message: 'Hello, Vue SSR!' },
    template: '<div>{{ message }}</div>'
  });


  renderer.renderToString(app, (err, html) => {
    if (err) {
      res.status(500).end('Internal Server Error');
      return;
    }
    res.end(`
      <!DOCTYPE html>
      <html lang="en">
        <head><title>Vue SSR Demo</title></head>
        <body>${html}</body>
      </html>
    `);
  });
});


const port = 3000;
app.listen(port, () => {
  console.log(`Server started at http://localhost:${port}`);
});
  1. 「修改入口文件」:修改Vue.js应用的入口文件,通常是main.js,以支持服务器端渲染。
// main.js
import Vue from 'vue';
import App from './App.vue';


export function createApp() {
  const app = new Vue({
    render: (h) => h(App)
  });


  return { app };
}
  1. 「创建模板文件」:在根目录下创建一个HTML模板文件,用于在服务器端渲染时使用。
<!-- index.template.html -->
<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="utf-8">
    <title>{{ title }}</title>
  </head>
  <body>
    <!--vue-ssr-outlet-->
  </body>
</html>
  1. 「更新服务器文件」:在服务器文件中引入相关的依赖,并使用创建的模板文件。
// server.js
const express = require('express');
const { createRenderer } = require('vue-server-renderer');
const fs = require('fs');
const path = require('path');
const { createApp } = require('./main');


const app = express();
const renderer = createRenderer({
  template: fs.readFileSync(path.resolve(__dirname, 'index.template.html'), 'utf-8')
});


app.get('*', (req, res) => {
  const { app } = createApp();


  renderer.renderToString(app, (err, html) => {
    if (err) {
      res.status(500).end('Internal Server Error');
      return;
    }
    res.end(html);
  });
});


const port = 3000;
app.listen(port, () => {
  console.log(`Server started at http://localhost:${port}`);
});
  1. 「构建和运行」:使用适当的构建工具(例如Webpack)为服务器端渲染构建应用。
npm run build

然后运行服务器文件:

node server.js

这只是一个简单的例子,实际上,服务器端渲染涉及到更多的配置和优化。可能需要考虑数据预取、路由匹配、状态管理等方面的问题。Vue.js的官方文档中有更详细的指南和示例,可以根据具体情况查看文档:Vue.js Server-Side Rendering Guide。

小结

总结一下在vue中实现SSR。

  • 创建Vue.js应用,确保应用是“渐进增强”的,即在没有JavaScript的情况下也能正常工作。
  • 安装vue-server-renderer等相关依赖。
  • 创建服务器文件,处理服务器端渲染的逻辑,并使用模板文件生成完整的HTML页面。
  • 修改Vue.js应用的入口文件以支持服务器端渲染。
  • 构建和运行服务器端渲染的应用。

原文地址:https://mp.weixin.qq.com/s/hwD5nCQ35aR43PAgogaIzQ

延伸 · 阅读

精彩推荐
  • vue.js推荐七个Vue 3的高颜值UI组件库

    推荐七个Vue 3的高颜值UI组件库

    Vue 3.0 已经发布两年多的时间,今年 2 月 Vue 3.0 也正式成为新的默认版本。今天就来分享 7 个适用于 Vue 3 的高颜值 UI 组件库!...

    Echa攻城狮5992022-12-06
  • vue.js如何使用RoughViz可视化Vue.js中的草绘图表

    如何使用RoughViz可视化Vue.js中的草绘图表

    这篇文章主要介绍了如何使用RoughViz可视化Vue.js中的草绘图表,帮助大家更好的理解和使用roughViz,感兴趣的朋友可以了解下...

    程序员张张9492022-01-12
  • vue.js为啥我放弃用 Pinia 和 Vuex 去做字典状态管理呢?

    为啥我放弃用 Pinia 和 Vuex 去做字典状态管理呢?

    如果我们的字典数据封装是基于Pinia或Vuex去封装的,那就耦合在一起了,万一以后项目用了其他的状态管理工具呢?那是不是我又得基于这个状态管理工具...

    前端之神8682024-01-15
  • vue.js通过vue.extend实现消息提示弹框的方法记录

    通过vue.extend实现消息提示弹框的方法记录

    这篇文章主要给大家介绍了关于通过vue.extend实现消息提示弹框的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习...

    林子酱9952021-12-28
  • vue.js2024 年 Vue 发展预测

    2024 年 Vue 发展预测

    对于前端开发领域来说,Vue.js 的世界在不断快速发展。本文就来尝试预测一下 2024 年 Vue 可能的发展方向。...

    前端充电宝11712023-11-29
  • vue.jsVue.js源码分析之自定义指令详解

    Vue.js源码分析之自定义指令详解

    这篇文章主要给大家介绍了关于Vue.js源码分析之自定义指令的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价...

    大沙漠9242022-03-02
  • vue.jsVue多选列表组件深入详解

    Vue多选列表组件深入详解

    这篇文章主要介绍了Vue多选列表组件深入详解,这个是vue的基本组件,有需要的同学可以研究下...

    yukiwu5742022-01-25
  • vue.jsVue使用鼠标在Canvas上绘制矩形

    Vue使用鼠标在Canvas上绘制矩形

    这篇文章主要介绍了Vue使用鼠标在Canvas上绘制矩形,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...

    小诸葛的博客11092021-12-16