• SSR 第一篇,搭建简单的SSR程序


    SSR

    什么是SSR

    Vue 组件渲染为服务器端的HTML字符串,将他们直接发送到浏览器,最后将静态标记混合为客户端上完成全交互应用程序。

    SSR 优点

    • SEO

    • 首屏显示时间

    SSR 缺点

    • 开发逻辑复杂

    • 开发条件限制:比如一些生命周期不能用,一些第三方库不能用

    • 服务器负载大

    准备工作

    首先 我们来构建项目

    npm init -y
    

    安装依赖

    npm install vue vue-server-renderer express -D
    

    注意:确保vue、vue-server-renderer、vue-template-compiler版本一致

    创建一个express服务器,将vue ssr集成进来 文件目录 server.js

    // 导入express作为渲染服务器
    const express = require('express')
    // 导入createRenderer用于获取渲染器
    const { createRenderer } = require('vue-server-renderer')
    // 导入Vue用于声明待渲染实例
    const Vue = require('vue')
    // 创建express实例
    const app = express()
    // 获取渲染器
    const renderer = createRenderer()
    app.get('*',async function(req, res) {
      // 待渲染vue实例
      const template = new Vue({
        template: `<h1>hello world</h1>`
      })
      // renderToString可以将vue实例转换为html字符串 
      // 若未传递回调函数,则返回Promise
      const html = await renderer.renderToString(template)
      res.send(html)
    })
    // 绑定程序监听端口到指定的主机和端口号
    app.listen(3000, function() {
      console.log('running...')
    })
    

    完成,我们来运行看看 node server.js

    我们来访问一下localhost:3000,就会看到服务端写入的html结构

    在网页中查看源码,可以看到 <h1 data-server-rendered="true">hello world</h1> data-server-rendered="true" 这个属性就是来告诉我们这个页面是来做服务端渲染的。

    使用一个页面模板
    当你在渲染 Vue 应用程序时,renderer 只从应用程序生成 HTML 标记 (markup)。在这个示例中,我们必须用一个额外的 HTML 页面包裹容器,来包裹生成的 HTML 标记。

    <!DOCTYPE html>
    <html lang="en">
    <head>
      <meta charset="UTF-8">
      <meta name="viewport" content="width=device-width, initial-scale=1.0">
      <meta http-equiv="X-UA-Compatible" content="ie=edge">
      <!-- 使用双花括号(double-mustache)进行 HTML 转义插值(HTML-escaped interpolation) -->
      <title>{{ title }}</title>
    </head>
    <body>
      <!--vue-ssr-outlet-->
    </body>
    </html>
    

    注意 <!--vue-ssr-outlet--> 注释 -- 这里将是应用程序 HTML 标记注入的地方。

    然后,我们可以读取和传输文件到 Vue renderer 中:

    const template = fs.readFileSync(path.join(__dirname, './public/index.html'))
    // 获取渲染器
    const renderer = createRenderer({
      template
    })
    renderer.renderToString(app, (err, html) => {
      console.log(html) // html 将是注入应用程序内容的完整页面
    })
    

    完整实例代码

    // 导入express作为渲染服务器
    const express = require('express')
    // 导入createRenderer用于获取渲染器
    const { createRenderer } = require('vue-server-renderer')
    // 导入fs模块
    const fs = require('fs')
    const path = require('path')
    // 导入Vue用于声明待渲染实例
    const Vue = require('vue')
    // 创建express实例
    const app = express()
    
    const template = fs.readFileSync(path.join(__dirname, './public/index.html'))
    // 获取渲染器
    const renderer = createRenderer({
      template: template.toString()
    })
    
    app.get('*',async function(req, res) {
      // 待渲染vue实例
      const template = new Vue({
        template: `<h1>hello world</h1>`
      })
      // renderToString可以将vue实例转换为html字符串 
      // 若未传递回调函数,则返回Promise
      const html = await renderer.renderToString(template, {
        title: 'vue ssr'
      })
      res.send(html)
    })
    
    // 绑定程序监听端口到指定的主机和端口号
    app.listen(3000, function() {
      console.log('running...')
    })
    


    我们右键查看源代码

  • 相关阅读:
    as3的InteractivePNG例子
    HttpWebRequest模拟POST提交防止中文乱码
    net发布的dll方法和类显示注释信息(字段说明信息)[图解]
    IP地址、手机归属和身份证查询接口
    一些好用的开源控件
    c# 操作IIS应用程序池
    c# 获取电脑硬件信息通用查询类[测试通过]
    C# 操作线程的通用类[测试通过]
    几款浏览器JavaScript调试工具
    Microsoft SQL Server 2005 提供了一些工具来监控数据库
  • 原文地址:https://www.cnblogs.com/wangyong1997/p/13500528.html
Copyright © 2020-2023  润新知