zoukankan      html  css  js  c++  java
  • Vue 2.0 服务端渲染入门

    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)
  • 相关阅读:
    数字基本数据类型范围比较
    java中float和double的区别
    ASP.NET中javascript与c#互相访问
    Javascript技术之详尽解析event对象
    Java基础-Java中的Calendar和Date类
    逻辑运算符
    JS获取当前时间
    几秒后刷新页面
    【LiteOS】LiteOS任务篇源码分析删除任务函数
    POJ 2385 Apple Catching (DP)
  • 原文地址:https://www.cnblogs.com/bhaltair/p/6441302.html
Copyright © 2011-2022 走看看