Vue 2.0 服务端渲染入门介绍


Posted in Javascript onMarch 29, 2017

1 什么是服务端渲染 SSR

server side render

就是通过后端吐模板,而不是通过前端ajax获取数据,拼接字符串。

2 为什么需要SSR

需要SEO,因为爬虫不会等待ajax结果。

客户端网络慢,加载速度慢,影响用户体验。

3 另一种解决办法 预渲染

不是一次性下载整个单页应用,预渲染只是在构建时为了特定的路由生成特定的几个静态页面

你用webpack可以很简单地通过prerender-spa-plugin来添加预渲染

 4 NodeJS编写Vue的SSR

首先npm install --save-dev的有 vue express vue-server-renderer

// server.js

'use strict';

var fs = require('fs');
var path = require('path');

global.Vue = require('vue')

var layout = fs.readFileSync('./index.html', 'utf8')

var renderer = require('vue-server-renderer').createRenderer()

var express = require('express')
var server = express()

server.use('/assets',express.static(
  path.resolve(__dirname,'assets')
))


server.get('*',function(req, res){

  // 将Vue实例渲染成HTML
  renderer.renderToString(
    // 创建一个应用实例
    require('./assets/app')(),

    // 处理渲染结果
    function(error, html){
      if(error){
        console.error(error);
        return res
          .status(500)
          .send('Server Error')
      }
      // 发送布局和HTML文件
      res.send(layout.replace('<div id="app"></div>', html))

    }
  )
})


server.listen(5000, function(error){
  if(error) throw errorr;
  console.log('Server is running at localhost:5000')
})
// index.html 

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Document</title>
  <script src="" charset="utf-8"></script>
  <script src="/assets/vue.js" charset="utf-8"></script>
</head>
<body>

  <div id="app"></div>
  <script src="/assets/app.js" charset="utf-8"></script>
  <script type="text/javascript">app.$mount('#app')</script>


</body>
</html>
// assets/app.js

(function() {
  'use strict'
  var createApp = function() {
    return new Vue({
      template: '<div id="app">你已经在这花了 {{ counter }} 秒。</div>',
      data: {
        counter: 0
      },
      created: function() {
        var vm = this;
        setInterval(function(){
          vm.counter += 1;
        },1000)
      }
    })
  }

  // 暴露接口
  if(typeof module !== 'undefined' && module.exports) {
    module.exports = createApp
  } else {
    this.app = createApp()
  }

}).call(this)

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
JavaScript中String和StringBuffer的速度之争
Apr 01 Javascript
通过Jquery遍历Json的两种数据结构的实现代码
Jan 19 Javascript
DIV+CSS+JS不间断横向滚动实现代码
Mar 19 Javascript
jQuery中last()方法用法实例
Jan 06 Javascript
JavaScript开发者必备的10个Sublime Text插件
Feb 27 Javascript
最佳的JavaScript错误处理实践
Jul 16 Javascript
微信小程序 实现拖拽事件监听实例详解
Nov 16 Javascript
微信小程序 下拉菜单简单实例
Apr 13 Javascript
微信小程序多列选择器range-key使用详解
Mar 30 Javascript
angular内置provider之$compileProvider详解
Sep 27 Javascript
angular使用md5,CryptoJS des加密的方法
Jun 03 Javascript
vue 验证两次输入的密码是否一致的方法示例
Sep 29 Javascript
vue2组件实现懒加载浅析
Mar 29 #Javascript
整理关于Bootstrap排版的慕课笔记
Mar 29 #Javascript
如何使用Bootstrap创建表单
Mar 29 #Javascript
Bootstrap 响应式实用工具实例详解
Mar 29 #Javascript
jQuery日程管理控件glDatePicker用法详解
Mar 29 #jQuery
利用js查找数组中指定元素并返回该元素的所有索引示例
Mar 29 #Javascript
jQuery实现简单漂亮的Nav导航菜单效果
Mar 29 #jQuery
You might like
第1次亲密接触PHP5(2)
2006/10/09 PHP
php中用foreach来操作数组的代码
2011/07/17 PHP
PHP中session变量的销毁
2014/02/27 PHP
ThinkPHP自定义函数解决模板标签加减运算的方法
2015/07/03 PHP
Yii2 输出xml格式数据的方法
2016/05/03 PHP
PHP正则之正向预查与反向预查讲解与实例
2020/04/06 PHP
javascript实现的动态文字变换
2007/07/28 Javascript
基于jquery实现的鼠标滑过按钮改变背景图片
2011/07/15 Javascript
JavaScript执行效率与性能提升方案
2012/12/21 Javascript
三种动态加载js的jquery实例代码另附去除js方法
2014/04/30 Javascript
jquery easyui DataGrid简单示例
2017/01/23 Javascript
[原创]SyntaxHighlighter自动识别并加载脚本语言
2017/02/07 Javascript
bootstrap table操作技巧分享
2017/02/15 Javascript
angularJS之$http:与服务器交互示例
2017/03/17 Javascript
vue进行图片的预加载watch用法实例讲解
2018/02/07 Javascript
jQuery实现的上传图片本地预览效果简单示例
2018/03/29 jQuery
基于vue中对鼠标划过事件的处理方式详解
2018/08/22 Javascript
解决vue接口数据赋值给data没有反应的问题
2018/08/27 Javascript
Vue商品控件与购物车联动效果的实例代码
2019/07/21 Javascript
通过layer实现可输入的模态框的例子
2019/09/27 Javascript
JS回调函数简单易懂的入门实例分析
2019/09/29 Javascript
[02:16]DOTA2英雄基础教程 干扰者
2014/01/15 DOTA
python继承和抽象类的实现方法
2015/01/14 Python
Python函数中*args和**kwargs来传递变长参数的用法
2016/01/26 Python
python3爬虫怎样构建请求header
2018/12/23 Python
Pytorch to(device)用法
2020/01/08 Python
利用pipenv和pyenv管理多个相互独立的Python虚拟开发环境
2020/11/01 Python
详解css3中的伪类before和after常见用法
2020/11/17 HTML / CSS
党员目标管理责任书
2014/07/25 职场文书
社区助残日活动总结
2014/08/29 职场文书
新党章的学习心得体会
2014/11/07 职场文书
2015年银行工作总结范文
2015/04/01 职场文书
CSS3 制作的悬停缩放特效
2021/04/13 HTML / CSS
基于Python的EasyGUI学习实践
2021/05/07 Python
教你一步步实现一个简易promise
2021/11/02 Javascript
Oracle使用别名的好处
2022/04/19 Oracle