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 cookies 设置、读取、删除实例代码
Apr 12 Javascript
Jvascript学习实践案例(开发常用)
Jun 25 Javascript
jquery Mobile入门—外部链接切换示例代码
Jan 08 Javascript
编写针对IE的JS代码两种编写方法
Jan 30 Javascript
浏览器的JavaScript引擎的识别方法
Oct 20 Javascript
禁止空格提交表单的js代码
Nov 17 Javascript
在jquery中combobox多选的不兼容问题总结
Dec 24 Javascript
jQuery实现点击后标记当前菜单位置(背景高亮菜单)效果
Aug 22 Javascript
使用jQuery mobile库检测url绝对地址和相对地址的方法
Dec 04 Javascript
javascript实现秒表计时器的制作方法
Feb 16 Javascript
详解vee-validate的使用个人小结
Jun 07 Javascript
vue脚手架项目创建步骤详解
Mar 02 Vue.js
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
增加反向链接的101个方法 站长推荐
2007/01/31 PHP
[原创]ThinkPHP让../Public在模板不解析(直接输出)的方法
2015/10/09 PHP
PHP目录与文件操作技巧总结(创建,删除,遍历,读写,修改等)
2016/09/11 PHP
VSCode+PHPstudy配置PHP开发环境的步骤详解
2020/08/20 PHP
PHP 使用位运算实现四则运算的代码
2021/03/09 PHP
javascript转换字符串为dom对象(字符串动态创建dom)
2010/05/10 Javascript
jquery中ajax调用json数据的使用说明
2011/03/17 Javascript
jquery应该如何来设置改变按钮input的onclick事件
2012/12/10 Javascript
图片上传插件jquery.uploadify详解
2013/11/15 Javascript
JS的get和set使用示例
2014/02/20 Javascript
JS中的log对象获取以及debug的写法介绍
2014/03/03 Javascript
Javascript玩转继承(二)
2014/05/08 Javascript
jquery制作select列表双向选择示例代码
2014/09/02 Javascript
jQuery实现输入框下拉列表树插件特效代码分享
2015/08/27 Javascript
JS for...in 遍历语句用法实例分析
2016/08/24 Javascript
BootStrap组件之进度条的基本用法
2017/01/19 Javascript
ES6正则的扩展实例详解
2017/04/25 Javascript
微信小程序实现指定显示行数多余文字去掉用省略号代替
2018/07/25 Javascript
Angular6 发送手机验证码按钮倒计时效果实现方法
2019/01/08 Javascript
python实现爬虫下载美女图片
2015/07/14 Python
Python+matplotlib实现填充螺旋实例
2018/01/15 Python
python3实现SMTP发送邮件详细教程
2018/06/19 Python
用python代码将tiff图片存储到jpg的方法
2018/12/04 Python
用Python中的turtle模块画图两只小羊方法
2019/04/09 Python
python 判断字符串中是否含有汉字或非汉字的实例
2019/07/15 Python
Django的用户模块与权限系统的示例代码
2019/07/24 Python
使用sklearn的cross_val_score进行交叉验证实例
2020/02/28 Python
使用Keras预训练好的模型进行目标类别预测详解
2020/06/27 Python
django ObjectDoesNotExist 和 DoesNotExist的用法
2020/07/09 Python
Python批量获取并保存手机号归属地和运营商的示例
2020/10/09 Python
高品质和独特的产品世界:Creations and Collections
2018/01/07 全球购物
中医学专业自荐信范文
2014/04/01 职场文书
羊脂球读书笔记
2015/06/30 职场文书
婚礼答谢词范文
2015/09/29 职场文书
2019年共青团工作条例最新版
2019/11/12 职场文书
css实现文章分割线样式的多种方法总结
2021/04/21 HTML / CSS