随谈_前端与后端

news2024/9/27 5:42:01

文章目录

  • 一、前言
  • 二、前后端分别是什么?
    • 2.1. 前端(front end)
    • 2.2. 后端(back end)


一、前言

最近在学习Vue,打算边学边用,开发一个网页系统。
Vue的话,网上介绍很多,简单讲就是一个前端JS框架。
前端-JS-框架,说明它是开发前端的(我的理解就是网页界面交互),并且主要用JS开发,而且有自己的一套写法(框架)。

其实网页中前端的概念,我是比较陌生的。我的理解它就是指HTML界面,网页上能呈现出来的内容就是前端。那与此相对的是后端,后端我的理解就是服务器,处理数据,处理请求,基本不涉及界面。

现在看的话,这种理解没有太大问题。问题就在于太笼统,如果你是爱好者,这样理解就够了;如果你是开发者,那还得深入一下,否则就可能会遇到我写这篇文前遇到的问题。

回到Vue,在我学完Vue的基础课程后。我觉得可以开始写点东西了,于是我参考教程,用Vite创建了一个Vue工程,建了一些SFC(单文件组件),挂载到了html上的容器上,一个简单的原生的界面就做好了。
在这里插入图片描述
到这里,除了界面丑了点(因为没用UI框架,也没加样式修饰),也没啥大问题。
但此时,展现出来的数据都是死的。死的就是说,数据是静态的,在Vue的JS代码中是固定写死的。像下面这样,在mounted选项中事先添加的固定数据。
在这里插入图片描述
实际生产环境中,数据肯定是动态的,数据往往存在数据库中,需要你去读取的。
于是,我打算在mounted中连接并读取数据库,将原先固定的数据改成从数据库中读取,这样每次进入界面展现的数据都是从数据库中获取的“新”数据,更接近实际环境。

以前开发桌面程序时,使用数据库的流程通常是,

  • 创建一个数据库连接
  • 通过该连接返回的对象,来读写数据库
  • 操作完后,关闭连接

所以自然而然地认为,网页中(这边指前端)连接数据库也是同样的方式(该方式比较直接,我就称其为直连)。

但搜索了一番之后发现不太一样。
搜索“Vue连接数据库”这个关键字,跳出来的信息都是:

  • Vue通过Node连接数据库
  • Vue通过express连接数据库
  • Java + Vue连接数据库
  • 等等

点开详细页面,可以看到一些post、get、请求、响应等词眼。没有出现我想象中的,直接装个库或插件,然后写两条语句就连接上数据库了。
这个时候我意识到,Vue也许不能直连数据库,或者说前端一般不会直连数据库。

其实我在文章开头也说了,前端用于网页呈现内容,后端用于处理各种数据请求。因此,不难联想到我这边应该是缺少了后端。不然网页开发为啥要分前后端,直接前端连数据库显示数据就好了。

缺少了后端,那后端应该怎么部署?部署了后端后,前端如何通过后端连接数据库?为什么前端不能直连数据库?。。。
还有在使用Vue的过程中,发现它也分渲染的界面(html),也有组件、应用、各种插件,甚至界面也要绑定数据(响应式属性)。似乎也参杂后端的一些概念?好像和我理解的传统前端不太一样。

要回答这些问题,我觉得还是得回到前端与后端这两个基本概念。
因为我理解的前后端比较老,现在概念可能更新了。

二、前后端分别是什么?

2.1. 前端(front end)

前端就是网页上的内容展示与用户的交互。
内容展示指网页上看到的图片、文字、视频等信息;用户交互指用户在页面上通过点击按钮、输入文字等等动作,对网站提供数据输入,对用户的输入进行响应。

前端开发用到的基础技术就是html、css和JavaScript。分别用来控制网页中的内容、视觉效果和用户交互。

你在浏览器上看到的网页,其实就对应一个html文件,文件装的就是html代码,而浏览器的职责之一就是通过你输入的网址,从网站上下载对应的html代码,并把代码渲染成你看到的样子。

而前端的工作内容之一就是编写html代码,或者是使用一些技术来为页面动态生成html代码,任何一个网页都可以通过浏览器的开发者工具看到它的html代码,你会发现它其实是由一堆各种类型的尖括号标签嵌套而成的。
在这里插入图片描述
css代码则是用来指定每个html标签以什么样的外观和风格展示,比如:长宽、位置、颜色、居中/分散、字体等。css代码被浏览器读入,并渲染成你看到的视觉效果。

前端开发中真正的编程部分是JavaScript,网页如何与用户交互,如何与后端交互,都是通过JavaScript代码实现的,就像html和css是被浏览器执行一样,JavaScript也是交给浏览器来执行的。

写程序时,不管使用什么语言,通常不会重复造轮子,而是会调用现成的库来实现一些常见功能,让开发过程更高效。现在前端JavaScript开发中,React和Vue(国内比较流行)是比较流行的框架。它们不仅可以用来实现与用户的交互逻辑和事件响应,连页面的html代码都可以生成。
这种在浏览器端生成html代码进行渲染的方式叫做客户端渲染(Client-side Rendering);与之相反的是服务端渲染(Server-side Rendering),也就是页面完整的html代码,全由网站的前端服务器生成好后,再发给浏览器。

前端服务器的逻辑可以通过任何编程语言实现,比如Java、JavaScript、python、php等,只要服务器的行为遵守http协议即可。

服务端渲染


这边既然提到服务端渲染了,就进一步介绍一下,以加深印象。
在讲服务端渲染前,先回顾一下页面的渲染流程:渲染流程

  1. 浏览器通过请求得到一个HTML文本(在浏览器地址栏输入地址,服务器回一个HTML文本给你)
  2. 浏览器解析HTML文本,构建DOM树(浏览器渲染进程解析HTML文本,构建DOM树,就是将HTML文本中的标签元素嵌套关系理出来,构建一棵节点树)
  3. 解析HTML的同时,如果遇到内联样式或样式脚本,则下载并构建样式规则,若遇到JavaScript脚本,则会下载执行脚本(HTML文本中除了DOM元素,还可能会遇到样式表CSS、脚本文件,比如下面这样的,就会下载下来)
    在这里插入图片描述
  4. DOM树和样式规则(哪个DOM该用什么样式)构建完成后,渲染进程将两者合并成渲染树(render tree)(渲染树和DOM树类似,多了样式描述,且少了head,也没有脚本)
  5. 浏览器渲染进程开始对渲染树进行布局,生成布局树(就是将样式描述给实现,计算元素大小,位置)(因为元素之间会相互影响,父元素的宽度和位置会影响子元素,所以若DOM元素层级太深,对浏览器来说渲染越复杂)
  6. 渲染进程对布局树进行绘制,生成绘制记录
  7. 渲染进程对布局树进行分层,分别栅格化每一层,并得到合成帧(浏览器有时也会创建类似PS的多个图层,并能单独绘制这些图层)
  8. 渲染进程将合成帧信息发送给GPU进程显示到页面中

可以看到,页面的渲染其实就是浏览器将HTML文本转化为页面帧的过程(将HTML文档一步步解析执行生成画面)。
而如今我们大部分Web应用都是使用JavaScript框架(Vue、React、Angular)进行页面渲染的,也就是说,在执行JavaScript脚本时,HTML页面已经开始解析并且构建DOM树了,JavaScript脚本只是动态改变DOM树的结构,使页面成为期望的样子,这种渲染方式叫动态渲染,也叫客户端渲染。

那什么是服务端渲染?
顾名思义,服务端渲染就是在浏览器请求页面URL时,服务端将我们需要的HTML文本组装好,并返回给浏览器,这个HTML文本被浏览器解析后,不需要经过JavaScript脚本的执行,即可直接构建出DOM树并展示到页面中。这个服务端组装HTML的过程,叫做服务端渲染。

再讲讲早期的服务端渲染,
在没有AJAX的web1.0时代,几乎所有应用都是服务端渲染(与现在的服务端渲染有区别),那时浏览器请求页面URL,服务器收到请求后,到数据库查询数据,将数据丢到后端的组件模板(php、asp、jsp等)中,并渲染成HTML片段,接着服务器组装这些片段,组成一个完整的HTML,最后返回给浏览器。此时,浏览器拿到的是一个完整的被服务器动态组装出来的HTML文本,然后将该HTML文本渲染到页面中,该过程是没有任何JavaScript参与的。

客户端渲染


2.2. 后端(back end)

后端的主要工作之一就是开发数据访问服务,使前端可以通过调用后端服务对数据进行增删改查,从而实现前端对用户的请求响应。

比如你在网站注册时,该网站的前端就会调用其后端,将你的用户信息写入数据库,一个后端服务其实不局限于只被前端调用,还可以被移动app调用,也可以被其他后端服务调用。

在这里插入图片描述
类比一下,前端往往需要通过调用后端服务,来完成对用户请求的响应。
在这里插入图片描述
而后端服务往往需要查询数据库,来完成对前端请求的响应。

可以看出,前端和后端都是通过调用一个比自己更靠后的服务来对前方的用户请求进行响应。

后端开发会和后端服务器打交道,和前端服务器一样,后端服务器也可以由几乎任何一种编程语言实现,只要能把正确的数据返回给调用者即可,主流的编程语言也有各自流行的Web框架。比如基于Java的spring boot,基于Javascript的express,基于python的flask,选择哪种框架,一定程度上是看工程师喜欢哪种编程语言,哪个框架比较熟悉。还有一些后端服务框架,可以支持你用多种语言来开发,而不必绑定在一门特定语言上。

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

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

相关文章

容器安全的三大挑战

容器凭借其经济高效的优势改变了应用程序的交付方式,随着容器的普遍使用,管理应用程序基础设施的 IT 劳动力和资源也显著减少。然而,在保护容器和容器化生态系统时,软件团队遇到了许多障碍。尤其是习惯于更传统的网络安全流程和策…

MYSQL学习之路

MYSQL架构示意图 MYSQL8.0开始移除了查询缓存这个模块; 查询缓存:适合读多写少的任务; 建议:将 have_query_cache 设置为No,在需要使用查询缓存的语句上显式声明; select SQL_CACHE * from test;WAL(Write …

mysql sql优化、查看索引、创建索引

1.索引遵循原则 仅在被频繁检索的字段上创建索引。针对大数据量的表创建索引,而不是针对只有少量数据的表创建索引。通常来说,经常查询的记录数目少于表中总记录数据的 15% 时,可以创建索引。这个比例并不绝对,它与全表扫描速度成…

java:jackson 一:Jackson Annotation

java:jackson 一:Jackson Annotation 1 前言 参考文档地址: https://www.baeldung.com/jacksonhttps://www.baeldung.com/jackson-annotations2 使用 2.1 Jackson Serialization Annotations jackson 序列化注解 2.1.1 JsonAnyGetter T…

产业互联网是以大数据、云计算、AI等为代表的数字技术的出现为标志

事实上,以往,我们所经历的那个互联网玩家频出的年代,其实就是一个以互联网技术为主导的年代。在那样一个年代里,互联网技术几乎是解决一切痛点和难题的万能解药,几乎是破解一切行业痛点和难题的杀手锏。任何一个行业&a…

数据可视化③:大学生就业数据分析

大学生就业是和我们息息相关的话题,每一位大学生都关注着,我们常常在网络上看到有关大学生就业的话题,比如毕业季的一些讨论。在大一的创新创业课中,我们也了解到自己所学的专业和以后如何就业,往哪方面就业。但我们了…

深度学习目标检测_IOU、Precision、Recall、AP、mAP详解

文章目录背景IOU:Intersection Over Unionprecision(精度)和recall(召回率)TP、TN 、FP 、FNAP和mAP首先回顾两个概念PR曲线AP(Average Precision)mAP(mean Average Precision)背景 目标检测的任务是找出图…

[oeasy]python0035_ 整合shell编程_循环_延迟_清屏

整合shell编程 回忆上次内容 用\r 可以让输出位置回到行首原位刷新时间 如果想要的是大字符效果 需要使用 figlet但同时还希望能刷新这可能吗?🤔 建立脚本 我们得熟悉一下shell 先新建一个test.sh vi test.sh python3 show_time.py python3 show_time.…

如何通过GB35114国密标准接入到LiveGBS GB28181/GB35114监控平台

1.1 安装LiveGBS GB28181/GB35114视频平台 1.2 获取设备端证书给平台 我们用LiveNVR做为设备端向LiveGBS注册,这里先将LiveNVR的证书导出,并给LiveGBS端。 本地自签名证书是LiveNVR自己给自己签发的证书。如果需要用第三方机构的证书,可点击…

【软件测试】资深测试的总结,有限时间找最有价值bug......

目录:导读前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结(尾部小惊喜)前言 测试团队的新同事&a…

Mybatis进阶之自定义TypeHandler

实际应用开发中的难免会有一些需求要自定义一个TypeHandler ,比如这样一个需求:前端传来的性别是 男, 女,但是数据库定义的字段却是tinyint 类型( 1:男 2:女)。此时可以自定义一个年龄的类型处理器,进行转换…

Linux学习笔记——Linux实用操作(一)

04、Linux实用操作 4.1、各类小技巧(快捷键) 学习目标: 掌握各类实用小技巧 强制停止退出、登出历史命令搜索光标移动 1、Ctrlc强制停止 Linux某些程序的运行,如果想要强制停止它,可以使用快捷键Ctrlc 命令输入…

一个基于Vue+SpringBoot的个人博客项目,含数据库文件

blogSpringBoot 项目介绍 完整代码下载地址:一个基于VueSpringBoot的个人博客项目,含数据库文件 该项目是个人博客项目,采用Vue SpringBoot开发。 后台管理页面使用Vue编写,其他页面使用Thymeleaf模板。 项目演示地址&#…

什么是 MySQL 的“回表”?

1. 索引结构 要搞明白这个问题,需要大家首先明白 MySQL 中索引存储的数据结构。这个其实很多小伙伴可能也都听说过,BTree 嘛! BTree 是什么?那你得先明白什么是 B-Tree,来看如下一张图: 前面是 B-Tree&am…

不止稳定快速,看华为云CDN如何在国际云服务市场中“分蛋糕”

互联网时代,网络的应用已十分普及,但依然存在下载慢、网络卡顿的现象。如企业业务运行过程中出现的卡顿现象导致数据延时;各校因疫情等原因网课时间长、访问应用人数过多,造成网络卡顿现象严重,无法带来良好的上课体验…

ArcGIS基础实验操作100例--实验16对字段自定义赋值

本实验专栏来自于汤国安教授《地理信息系统基础实验操作100例》一书 实验平台:ArcGIS 10.6 实验数据:请访问实验1(传送门) 基础编辑篇--实验16 对字段自定义赋值 目录 一、实验背景 二、实验数据 三、实验步骤 (1…

玩转云服务器,怎样用云服务器架设搭建游戏:浪剑天下架设教程,手把手教你架设游戏服务器,小白一看就会

服务器详情:服务器系统:LINUX-CENTOS7.6服务器配置:2核4G以上配置 搭建教程: 第一步:安装宝塔: yum install -y wget && wget -O install.sh http://download.bt.cn/install/install_6.0.sh &…

Allegro如何输出IPC文件操作指导

Allegro如何输出IPC文件操作指导 IPC文件是PCB上所有网络连接关系文件,在PCB生产前网表比对必须的文件,如下图 如何输出IPC文件,具体操作如下 选择File选择IPC356

磁实验比较-反激式变压器(Matlab代码实现)

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…

代码随想录拓展day5 129. 求根节点到叶节点数字之和;1382.将二叉搜索树变平衡;100. 相同的树;116. 填充每个节点的下一个右侧节点指针

代码随想录拓展day5 129. 求根节点到叶节点数字之和;1382.将二叉搜索树变平衡;100. 相同的树;116. 填充每个节点的下一个右侧节点指针 全部都是关于二叉树的题目,对二叉树的遍历方式又是一个复习。 129. 求根节点到叶节点数字之…