服务器渲染

news/2024/7/10 0:46:27 标签: vue, web
webkit-tap-highlight-color: rgba(0, 0, 0, 0);">

一、浏览器端渲染

CSR:是Client Side Render简称,页面上的内容是由js文件进行渲染的,js文件在浏览器上运行,服务器返回一个html模板

过程:

用户发送请求,返回页面,此时页面是一个模板页面,通过js解析,通过接口去读数据,利用模板进行渲染,注入网站内容,不便于爬取

二、服务器端渲染

SSR:是Server Side Render简称,页面有服务器渲染生成,浏览器直接进行显示

过程:

用户发送请求,后端先获取一些数据,通过其渲染引擎利用模板进行页面的渲染,渲染好之后由后端将注入好的数据放到页面结构中,将携带数据的完整的也面结构返回浏览器。

三、对比

客户端渲染可以减轻服务端的压力,达到前后端分离的开发,但对SEO优化不是很友好

服务器渲染对SEO优化特别好,但是对服务器性能要求严格,但不能实现前后端分离。

四、服务器端渲染过程

  1. 初始化项目环境

    npm init -y

  2. 安装vue以及渲染包

    npm i vue vue-server-renderer --save

  3. 更改为开发模式

在这里插入图片描述
在这里插入图片描述

  1. 编写 server.js 文件

在这里插入图片描述

  1. 运行检测是否正常

    npm run dev

在这里插入图片描述

  1. 安装express模块

    npm i express --save

  2. 修改 server.js 文件

// 引入vue
const Vue = require('vue');
// 引入express并调用
const server = require('express')();

// express响应
server.get('/',(req,res)=>{
    // 创建一个实例
    const app = new Vue({
        template: `<div>hello</div>`
    });

    // 创建一个渲染函数
    const renderer = require('vue-server-renderer').createRenderer();

    // 将vue实例渲染为html
    // renderer.renderToString(vue实例,(错误信息,渲染后的html)=>{})
    renderer.renderToString(app).then(html=>{
        res.send(`
            <!DOCTYPE html>
            <html lang="en">
            <head>
                <meta charset="UTF-8">
                <meta http-equiv="X-UA-Compatible" content="IE=edge">
                <meta name="viewport" content="width=device-width, initial-scale=1.0">
                <title>Document</title>
            </head>
            <body>
                ${html}
            </body>
            </html>
        `);
    }).catch(err=>{
        console.log(err)
    })
})

// 监听端口
server.listen(8080)
  1. 在浏览器中发送请求,并查看结果

    [localhost:8080](http://localhost:8080/)

在这里插入图片描述


http://www.niftyadmin.cn/n/1787059.html

相关文章

安卓api文档_技术分享基于功能动词短语显式匹配的API方法推荐

CodeWisdom-技术分享基于功能动词短语显式匹配的API方法推荐正确选择和使用API是完成许多软件开发任务的前提条件。流行的API库(例如JDK和安卓API)一般都提供了参考文档&#xff0c;其中对于API功能和使用方式都有描述。然而&#xff0c;由于API开发人员提供的功能描述和应用开…

静态页面和动态页面

静态页面 在静态Web程序中&#xff0c;客户端使用浏览器连接到服务器上&#xff0c;使用HTTP协议发起一个请求&#xff0c;告诉服务器我现在需要得到哪个页面&#xff0c;所有的请求交给Web服务器&#xff0c;之后WEB服务器根据用户的需要&#xff0c;从静态页面的磁盘取出内容…

python 抽奖器_python编写实现抽奖器

本文实例为大家分享了python编写实现抽奖器的具体代码&#xff0c;供大家参考&#xff0c;具体内容如下# codingutf-8import sysimport osimport openpyxlif sys.version_info[0] 2:import Tkinterfrom Tkinter import *else:import tkinter as Tkinterfrom tkinter import *f…

git分支相关代码

添加新分支&#xff1a; git checkout -b [分支名]查看新分支&#xff1a;git branch切换分支&#xff1a; git checkout [分支名]添加到暂存区: git add . 也可以通过“”来进行 添加到本地仓库&#xff1a; git commit -m "注释"提交到远程服务器中&#xff1a; gi…

python collection_Python中Collection的使用小技巧

本文所述实例来自独立软件开发者 Alex Marandon&#xff0c;在他的博客中曾介绍了数个关于 Python Collection 的实用小技巧&#xff0c;在此与大家分享。供大家学习借鉴之用。具体如下&#xff1a;1.判断一个 list 是否为空传统的方式&#xff1a;if len(mylist):# Do somethi…

nginx 重启失败

问题描述 /usr/local/nginx/sbin/nginx -s reload报错 nginx: [error] open() “/usr/local/nginx-1.8.0-tlinux/logs/nginx.pid” failed (2: No such file or directory) 解决方法 /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf/usr/local/nginx/sbi…

python操作mysql数据库存储图片_python mysql存储图片

{"moduleinfo":{"card_count":[{"count_phone":1,"count":1}],"search_count":[{"count_phone":4,"count":4}]},"card":[{"des":"阿里技术人对外发布原创技术内容的最大平台&…

python getopt函数的使用_python getopt使用

python中 getopt 模块&#xff0c;该模块是专门用来处理命令行参数的函数getopt(args, shortopts, longopts [])参数args一般是sys.argv[1:]shortopts 短格式 (-)longopts 长格式(--)命令行中输入&#xff1a;python test.py -i 127.0.0.1 -p 80 55 66python test.py --ip127…