SEO(Search Engine Optimization,搜索引擎优化),是一种利用搜索引擎规则,提高网站在搜索引擎内自然排名的技术。通常这需要页面内容在页面加载完成时便已经存在。
前后端分离的纯前端项目,由于这类项目需要页面加载完成后再异步获取数据渲染,因此大部分搜索引擎无法获取到这类项目的内容。Vue SSR正是基于此类需求而给出的一种技术方案。利用nodejs搭建页面渲染服务,在服务端完成之前需要在客户端完成的页面渲染工作,输出给SEO更友好的页面。
目前对于首屏渲染速度的提升有许多方案,在ssr之外还有龙骨,墓碑,数据直出。相比于这些方案ssr方案实现是最复杂的,但效果也是最好的。
Vue SSR的实现有两种实现
更直接的控制应用程序的结构,更深入底层,更加灵活
平滑的开箱即用的体验,它建立在同等的Vue技术栈之上,但抽象出很多模板,并提供了一些额外的功能,例如静态站点生成。通过NUXT可以根据约定的规则,快速的实现Vue SSR
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1",
"server": "node index.js",
"dev": "nodemon ./server.js"
},
// ① 引入express,express()
const server = require('express')()
// 1. 引入vue
const Vue = require('vue')
// ② server.get('/',(req, res) => {})
server.get('/', (req, res) => {
const app = new Vue({
template: `<div>hello SSR !</div>`,
})
// 2. 使用vue-server-renderer的createRenderer,创建renderer
const renderer = require('vue-server-renderer').createRenderer()
// 3. renderer.toString(vue实例).then(html => {}).catch(err => {console.log(err)})
renderer
.renderToString(app)
.then((html) => {
console.log(html)
res.end(`
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" />AaA
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Document</title>
</head>
<body>${html}</body>
</html>
`)
})
.catch((err) => {
console.log(err)
})
})
// ③ server监听3001端口
server.listen(3001, () => {
console.log('http://localhost:3001')
})
// 1. 引入vue
const Vue = require('vue')
const app = new Vue({
template: `<div>hello SSR !</div>`,
})
// 2. 使用vue-server-renderer的createRenderer,创建renderer
const renderer = require('vue-server-renderer').createRenderer()
// 3. renderer.toString(vue实例).then(html => {}).catch(err => {console.log(err)})
renderer
.renderToString(app)
.then((html) => {
console.log(html)
})
.catch((err) => {
console.log(err)
})
从零开始搭建一个vue-ssr(上)
https://segmentfault.com/a/1190000019618170