- 作者:老汪软件技巧
- 发表时间:2024-09-07 17:03
- 浏览量:
VUE项目是SPA的项目,既可以做SSR服务器渲染也可以CSR客户端渲染
SPA (Single Page Application)
SPA是一种单页面应用的Web应用的设计模式。
在这种模式下,用户在浏览网站时,页面不会重新加载或只会部分重载
用户体验:
页面加载方式:
URL处理:
前后端分离:
SEO(搜索引擎优化)挑战:
性能:
开发和维护:
资源消耗:
CSR客户端渲染
在我们平常写VUE项目的时候大部分时候使用的都是CSR客户端渲染的方式
其中页面的主要内容和动态数据都是在用户的浏览器中通过JavaScript生成的。
这就导致了SEO的排名会靠后,搜索引擎爬虫可能无法有效地执行JavaScript代码,它们可能无法完全理解和索引通过JavaScript动态生成的内容。
我们直接创建一个vite项目,运行后可以看到
在浏览器中只有一个app的挂载点,并且其他的页面都是通过JavaScript去生成的,也就意味着,像响应式之类的操作,以及页面的交互都是在浏览器端完成的,但是如果是搜索引擎爬虫的话就没办法高效的读取,就意味着对其不太友好,搜索引擎爬虫希望的是访问得到的就是有完整结构的html
这时候就需要通过服务端将页面处理好发给前端
SSR服务端渲染
服务端渲染(Server-Side Rendering, SSR)是一种Web开发技术,它允许在服务器端生成完整的HTML页面,并将其发送到客户端浏览器。这种方式与传统的客户端渲染(CSR)不同,在CSR中,HTML页面的初始加载仅包含基本结构,而动态内容则通过JavaScript在客户端加载后动态生成。
接下来我们写一个例子
我们先添加对应的依赖
npm install express vue @vue/server-renderer @vue/compiler-sfc @vue/compiler-ssr
分别是以下依赖
"express": "^4.17.2",
"vue":"^3.2.26",
"@vue/server-renderer":"^3.2.26"
const express = require("express"); // 类koa 简单backend框架 commonjs
const app = express();
const Vue = require("vue"); // vue走向后端
const readerer3 = require("@vue/server-renderer"); // ssr
const vue3Compile = require("@vue/compiler-ssr"); // 编译模板
我们创建一个vue的页面
const vueapp = {
template: `
{{num}}
- {{n+1}}-- {{todo}}
`,
data() {
return {
num: 1,
todos: ["吃饭", "睡觉", "打豆豆"],
};
},
methods: {
add() {
this.num++;
console.log("11");
},
},
};
接下来我们为vueapp添加ssrRender属性
vueapp.ssrRender = new Function(
"require",
vue3Compile.compile(vueapp.template).code
)(require);
添加一个get请求
// http 协议基于请求响应的简单协议
app.get("/", async (req, res) => {
// 爬虫 拿到 组件的html 在vue之前
// res.end('hello world');
// 创建服务器端的渲染app
let vapp = Vue.createSSRApp(vueapp);
// 渲染
let html = await readerer3.renderToString(vapp);
const title = "vue3 ssr";
let ret = `
${title}
${html}
`;
res.end(ret);
});
创建 Vue 应用
// 创建服务器端的渲染app
let vapp = Vue.createSSRApp(vueapp);
渲染组件
// 渲染
let html = await readerer3.renderToString(vapp);
// 渲染
let html = await readerer3.renderToString(vapp);
生成完整的 HTML 响应
const title = "vue3 ssr";
let ret = `
html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>${title}title>
head>
<body>
<div id="app">${html}div>
body>
html>
`;
const title = "vue3 ssr";
let ret = `
html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>${title}title>
head>
<body>
<div id="app">${html}div>
body>
html>
`;
启动项目
app.listen(9093, () => {
console.log("server is running at port 9093");
});
最后执行后端并访问前端即可看到页面显示
并且该页面是由后端处理好,前端直接显示的,这也就是SSR服务器渲染