服务端渲染

news2025/4/28 1:34:13

服务端渲染 和 前后端分离!

 渲染

什么是渲染呢 ?

其实很简单, 就是把数据反应在页面上,说白了, 就是利用 js 的语法, 把某些数据组装成 html 结构的样子, 放在页面上展示。

举个例子 :

1. 准备一段 html 结构

 

<h1>hello world</h1>
<div class="demo-box"></div>

2. 准备一段数据

 

const str = '你好啊, 我是来自千锋教育的小千'

3. 进行渲染

 

const ele = document.querySelector('.demo-box')
ele.innerHTML = str

4. 打开浏览器

好了, 渲染完毕, 我们把一段 js 内的数据展示在了页面上。

当然了, 这只是一段非常非常简单的渲染,我们再来看一个稍微复杂一点的:

1. 准备一段 html 结构

 

<table border="1">
   <thead align="center">
     <tr>
       <td>序号</td>
       <td>名称</td>
       <td>介绍</td>
     </tr>
   </thead>
   <tbody>
     
   </tbody>
 </table>

2. 准备一段数据

 

const list = [
   { id: 1, title: '好程序员', desc: 'IT培训高端课程' },
   { id: 2, title: '千锋教育', desc: '前端培训界扛把子' },
   { id: 3, title: '高薪就业', desc: '学 IT, 来千锋, 拿高薪' }
]

3. 开始渲染

 

const ele = document.querySelector('tbody')

ele.innerHTML = list.reduce((prev, item) => {
 return prev + `
   <tr>
     <td>${ item.id }</td>
     <td>${ item.title }</td>
     <td>${ item.desc }</td>
   </tr>
 `
}, '')

4. 打开浏览器

我们已经把这个数组数据渲染在页面上了,渲染的方式多种多样, 不管你用什么方式, 只要是把数据在页面上展示出来, 这个行为就叫做渲染。

 浏览器和服务器

接下来, 咱们就要聊一下浏览器和服务器的问题了。

我们都知道浏览器也就是我们通常说的前端, 任务就是展示内容,服务器也就是我们通常说的后端, 任务就是准备数据, 处理数据。

还有一个叫做数据库的东西, 用来存储数据。这个时候, 我们先暂时忽略一下过程, 看一下结果。

这是我们从数据源头到结果的展示, 在这里我们忽略了过程,在这个过程里面, 我们有一个不可避免的问题, 就是浏览器, 不能直接从数据库中拿数据。所以, 在这个模型中, 我们还需要一个服务器的存储 。

  • 前端不能操作数据库, 但是服务端可以

  • 所以前端想要什么数据, 就告诉后端

  • 后端去数据库中找到对应的数据

  • 拿到数据以后进行整合和处理

  • 处理完毕后返回给前端

  • 这个时候前端就可以把数据渲染在页面上

看到这里, 我们可能会回忆起一点什么,这不就是我之前学习的 ajax 吗?

打开页面, 通过 ajax 发送请求到服务器获取数据,然后将响应体内容渲染在页面上

能想到这里, 说明你之前的内容掌握的很好,接下来咱们就开始进入正题。

 前后端分离和服务端渲染

页面也是服务器给的。

众所周知, 我们的页面, 也就是我们打开的 html 文件也是存储在服务器上面。

只不过我们在地址栏输入了地址以后, 会根据对应的规则找到对应的服务器,拿到这个 html 文件, 被浏览器解析显示了出来。

不管 html 文件, 你所有的 图片, 视音频, css, html, js 文件其实都是存储在服务器上面的。

 前后端分离

其实就是前端干前端的事情, 后端干后端的事情,也就是我们以前的情况。

  • 当你在地址栏输入地址的时候

  • 服务器返回一个文件给你

  • 当这个文件运行的时候, 通过执行内部的 js 代码

  • 发送一个 ajax 请求

  • 拿到对应返回的数据

  • 把数据渲染在页面上

 服务端渲染

其实就是在服务端把所有的事情做完, 直接把结果给到前端,刚才我们说了, 页面等所有文件其实都是存储在服务器上面的。

  • 当你在地址栏输入地址以后

  • 服务器会找到你需要的 html 文件, 但是先不给你

  • 然后去找到当前这个文件内所需要的数据内容

  • 然后, 把数据内容组装成一个 html 结构插入到页面内

  • 然后把插入好数据的页面直接返回给你

 区别

1. 数据渲染

前后端分离 : 后端把数据返回给客户端, 在客户端运算渲染出来

服务端渲染 : 后端把数据直接渲染在了 html 文件上, 把渲染好的文件给你

2. 源文件

前后端分离 : 你得到的 html 源文件是没有对应的渲染内容的, 需要依靠执行 js 渲染

服务端渲染 : 你得到的 html 源文件就是所有数据都书写好的文件

3. 页面加载速度

前后端分离 : 得到 html 页面以后, 还需要等待 ajax 请求数据在进行渲染

服务端渲染 : 得到的 html 就是完整的最终页面, 直接

展示即可

4. SEO

前后端分离 : 因为页面没有结构, 所以不利于搜索引擎抓取

服务端渲染 : 得到的 html 就是完整内容, 搜索引擎可以抓取到所有内容

举个例子:你家里刚刚装修好, 需要买一张床

前后端分离 ( 你: 前端, 销售商: 后端, 厂家: 数据库 )

  • 你给销售商说好, 你要什么样子的床, 什么颜色等等内容

  • 销售商就去厂家定制所有的材料

  • 然后销售商就拿着原材料, 送到你家就好了

  • 这个时候你需要自己去组装成一个床

  • 这时你就会发现, 你想睡在这个床上, 那么还需要一点时间

服务端渲染 ( 你: 前端, 销售商: 后端, 厂家: 数据库 )

  • 你给销售商说好, 你要什么样子的床, 什么颜色等等内容

  • 销售商就去厂家定制所有的材料

  • 然后呢, 销售商会在他那里把床组装好, 直接给你搬过来

  • 到你家以后呢, 把房顶掀起来, 床放进去, 齐活

  • 这时你是完全可以直接躺在床上睡觉的

 总结

● 前端的工作就是 展示数据

● 后端的工作就是 处理数据

前后端分离 : 前端负责数据渲染, 后端负责提供数据, 自己干自己的事情

服务端渲染 : 前端负责躺平, 后端负责数据和渲染

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/530474.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Android之 Service服务详解

一 四大组件 1.1 Activity组件&#xff0c;它一个单独的窗口&#xff0c;程序流程都必须在Activity中运行&#xff0c;所有它是最基本的模块。 1.2 service组件&#xff0c;用于在后台完成用户指定的操作。 1.3 content provider组件&#xff0c;会为所有的应用准备一个内容…

零知识证明:重要构造

文章目录 ZKP for NPBlums ZK PoK for HCCompletenessSoundnessZero KnowledgeWI of n-parallelized versionsProof of KnowledgeSpecial Soundness Constant Round ZKPFLS ParadigmGK Paradigm 在 零知识证明&#xff1a;安全定义 中介绍了 ZKP 的一些安全性定义&#xff0c;…

TFT驱动ST7789使用总结

最近在使用一款TFT驱动芯片ST7789&#xff0c;在阅读芯片数据手册和液晶屏数据手册时&#xff0c;发现总是对不上&#xff0c;芯片手册中&#xff0c;有好几个引脚&#xff0c;一会儿是这个作用&#xff0c;一会儿又变成另一种作用&#xff0c;实在是让人感到混淆。网上找了好久…

第三十六天学习记录:C语言进阶:指针详解Ⅳ

指向函数指针数组的指针 指向函数指针数组的指针是一个指针&#xff0c;指针指向一个数组&#xff0c;数组的元素都是函数指针。 int(*pfArr[4])(int, int);//pfArr是一个数组-函数指针的数组int(*(*ppfArr)[4])(int, int) &pfArr;//ppfArr是一个数组指针&#xff0c;指针…

网络进阶学习:重要网络协议(tcp协议,udp协议,http协议)

重要网络协议&#xff08;tcp协议&#xff0c;udp协议&#xff0c;http协议&#xff09; 网络协议是什么?TCP协议UDP协议HTTP协议TCP与UDP的职能区别⭐TCP职能⭐就TCP原理层面说应该分为三部分建立连接数据传输断开连接 ⭐UDP职能⭐就UDP原理层面说应该分为三部分发送数据数据…

单链表(增、删、查、改)的详细介绍 必看!!!

文章目录 链表介绍单链表初始化单链表打印增加节点单链表的头插单链表的尾插在给定位置之后插入在给定位置之前插入 删除节点单链表的头删单链表的尾删删除给定位置之后的节点删除给定位置处的节点 查找节点修改节点单链表销毁 链表介绍 链表是一种物理存储单元上非连续、非顺序…

【Mybatis】如何实现ORM映射-二

唠嗑部分 上篇文章我们说了Mybatis基本的CRUD操作及工具类的封装&#xff0c;相关文章&#xff1a; 【Mybatis】简单入门及工具类封装-一 大家都知道&#xff0c;Mybatis是半自动化的ORM框架&#xff0c;那么它到底是如何帮我们完成ORM映射的呢&#xff1f; 这就是本篇文章和…

SpringBoot整合Dubbo+Zookeeper

第一步、使用IDE创建一个SpringBoot项目 第二步、启动一个Zookeeper服务&#xff08;如果是第一次安装且没有配置zoo.cfg&#xff0c;此时会报出zookeeper服务器会提示缺少zoo.cfg文件&#xff09; 在zookeeper安装目录下的conf文件夹内有一个名为zoo_sample.cfg的配置文件&a…

[深度学习思想] ControlNet 工作原理

Stable Diffusion (2021 https://arxiv.org/abs/2112.10752) 带领了vision领域&#xff0c;具体是AI绘画领域达到了一个新高度。但是可控性成为使用的一个大瓶颈。Controlnet (2023 https://arxiv.org/abs/2302.05543) 提出一个深度学习模型框架&#xff0c;很好解决这个问题&a…

Liunx基础命令 - touch命令

touch命令 – 创建空文件与修改时间戳 touch命令的功能是用于创建空文件与修改时间戳。如果文件不存在&#xff0c;则会创建出一个空内容的文本文件&#xff1b;如果文件已经存在&#xff0c;则会对文件的Atime&#xff08;访问时间&#xff09;和Ctime&#xff08;修改时间&a…

带头双向循环链表(增、删 、查、改)基本操作详细介绍 必看!!!

文章目录 链表介绍链表初始化链表打印查找元素增加节点头插尾插在指定位置插入 删除节点头删尾删删除指定位置节点 链表判空获取链表中元素的个数链表销毁 链表介绍 前面说到&#xff0c;链表的结构一共有八种&#xff1a;带头单向循环链表、带头单向非循环链表、带头双向循环…

渗透测试--3.2捕获和监听网络数据

目录 1.监听捕获数据方法 2.kali监听捕获工具介绍 arpspoof driftnet 1.监听捕获数据方法 渗透测试中&#xff0c;捕获和监听网络数据是非常重要的一项任务&#xff0c;可以帮助我们发现潜在的漏洞和攻击面。以下是一些常见的捕获和监听网络数据的方法&#xff1a; 抓包工…

Liunx基础命令 - cp复制命令

cp命令 – 复制文件或目录 cp命令来自英文单词“copy”的缩写&#xff0c;中文译为“复制”&#xff0c;其功能是用于复制文件或目录。cp命令能够将一个或多个文件或目录复制到指定位置&#xff0c;亦常用于文件的备份工作。-r参数用于递归操作&#xff0c;复制目录时若忘记添…

网络编程——UDP编程

UDP编程 UDP编程步骤通信流程serverclient 函数接口socketbindrecvfromsendto 举例UDP客户端UDP服务器 UDP编程步骤 在C语言中进行UDP编程的一般步骤如下&#xff1a; &#xff08;1&#xff09;包含头文件&#xff1a; 在代码中包含必要的头文件&#xff0c;以便使用UDP编程所…

借助国内ChatGPT平替+剪映/百度AIGC平台快速制作短视频

系列文章目录 借助国内ChatGPT平替MindShow&#xff0c;飞速制作PPT 借助国内ChatGPT平替markmap/Xmind飞速生成思维导图 文章目录 系列文章目录前言一、科大讯飞“星火”认知大模型二、使用步骤1.借助讯飞星火生成短视频的文案2.选择剪映生成短视频3.选择百度AIGC平台生成短…

redis复制机制

文章目录 1. Redis 复制机制2. 基本命令3. 修改配置文件4. 代码案例4.1 一主二仆4.2 薪火相传4.3 反客为主 5. Redis复制工作流程6. Redis 复制的缺点 1. Redis 复制机制 概念 : Redis 复制机制 能干的活 : 读写分离 &#xff1a; 写 就找 主机 master &#xff0c; 读就找从机…

Centos7离线安装Docker

在我们部署Docker镜像时&#xff0c;难免会遇到服务器没有网络情况&#xff0c;这时候我们就需要离线安装Docker 参考文档&#xff1a;https://docs.docker.com/engine/install/binaries 下载Docker安装包 下载地址&#xff1a;https://download.docker.com/linux/static/st…

玩转Google开源C++单元测试框架Google Test系列(gtest)之六 - 运行参数

一、前言 使用gtest编写的测试案例通常本身就是一个可执行文件&#xff0c;因此运行起来非常方便。同时&#xff0c;gtest也为我们提供了一系列的运行参数&#xff08;环境变量、命令行参数或代码里指定&#xff09;&#xff0c;使得我们可以对案例的执行进行一些有效的控制。…

OpenCL编程指南-4.3类型转换

隐式类型转换 隐式类型转换是一种自动的类型转换&#xff0c;只要混合使用不同的类型&#xff0c;编译器就会完成这种隐式类型转换。这里支持表4-1中定义的标量类型&#xff08;除void、double和half以外&#xff09;的隐式转换。完成隐式转换时&#xff0c;并不只是重新解释一…

c/c++中的数据内存分布

c/c中的数据内存分布 1. C/C内存分布2. C语言中动态内存管理方式3. C中动态内存管理4. operator new与operator delete函数5. new和delete的实现原理6. malloc/free和new/delete的区别7.内存泄漏**什么是内存泄漏&#xff0c;内存泄漏的危害****内存泄漏分类&#xff08;了解&a…