介绍
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 范例详解