介绍
Vue.js 是构建客户端应用程序的框架。默认情况下,可以在浏览器中输出 Vue 组件,进行生成 DOM 和操作 DOM。然而,也可以将同一个组件渲染为服务器端的 HTML 字符串,将它们直接发送到浏览器,最后将这些静态标记”激活”为客户端上完全可交互的应用程序。
服务器渲染的 Vue.js 应用程序也可以被认为是”同构”或”通用”,因为应用程序的大部分代码都可以在服务器和客户端上运行。
优缺点
优点:
- 更好的 SEO,由于搜索引擎爬虫抓取工具可以直接查看完全渲染的页面。
- 更快的内容到达时间 (time-to-content),特别是对于缓慢的网络情况或运行缓慢的设备。
缺点:
- 开发条件所限。
- 涉及构建设置和部署的更多要求。
- 更多的服务器端负载。
基本用法
安装
npm install vue vue-server-renderer --save
渲染实例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
| const Vue = require("vue"); const app = new Vue({ template: `<div>Hello World</div>`, });
const renderer = require("vue-server-renderer").createRenderer();
renderer.renderToString(app, (err, html) => { if (err) throw err; console.log(html); });
renderer .renderToString(app) .then((html) => { console.log(html); }) .catch((err) => { console.error(err); });
|
与服务端集成
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
| npm install express --save
const Vue = require('vue') const server = require('express')() const renderer = require('vue-server-renderer').createRenderer()
server.get('*', (req, res) => { const app = new Vue({ data: { url: req.url }, template: `<div>访问的 URL 是: {{ url }}</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>Hello</title></head> <body>${html}</body> </html> `) }) })
server.listen(8080)
|
使用页面模板
1 2 3 4 5 6 7 8 9
| <!DOCTYPE html> <html lang="en"> <head><title>Hello</title></head> <body> </body> </html>
|
读取和传输文件到 Vue renderer 中:
1 2 3 4 5 6 7
| const renderer = createRenderer({ template: require("fs").readFileSync("./index.template.html", "utf-8"), });
renderer.renderToString(app, (err, html) => { console.log(html); });
|
vue-srr 范例详解