关于前端知识中框架概念部分的详细介绍

news2024/9/24 23:25:44

1、为什么要学习流行框架?

  1. 企业:为了提高效率,因为时间就是金钱。
  2. 开发人员:提高了开发效率
  3. 发展进程
    • JS=>JQuery=>模板引擎=>框架时代(Angular(2+)、React、Vue)
    • 好处:不用直接操作DOM,更多关注业务逻辑

2、前端框架与库的区别?

  1. 功能层面
    • 框架:提供全方位功能,是比较齐全的
    • :以提供API为主,像JQuery提供了大量的API,[框架]是提供基础性的服务为主,vue有虚拟Dom的支持,有双向数据绑定的支撑,像这些呢,都会一些基础性的服务,可以提升开发效率。
      • jquery库:操作DOM+网络请求 => 比如获取按钮,给按钮绑定事件…等
  2. 代码层面
    • 库:是为了实现某个功能,而调用某个函数 => 如:使用轮播图时,引入轮播图的库放置到代码中使用
    • 框架:帮助我们运行编写好的代码
      • 步骤1:初始化框架自身的一些行为 => 框架要运行,必须要先跑起来
      • 步骤2:执行你编写好的代码 => 由框架来帮助执行
      • 步骤3:释放一些资源;
  3. 总结
    • :单一某个层面,可以任何地方调用库,也是可以替代的,在pc端使用jquery库,在移动端可以使用更轻量级的zepto来实现dom操作
    • 框架:大而沉,把代码给框架去执行。是一套完整的解决方案;对项目的侵入性较大,我们的代码是只写代码段的,不会写完整的页面,会把自己写的代码段交给框架,让框架帮我们跑起来,项目如果需要更换框架,则需要重新架构整个项目,因为它不如库这么灵活

3、MV*架构模式是什么?

  1. 解释:MV是指好几种架构模式,这里的*是泛指,是指mv开头的一系列架构模式,而vue框架就属于这种框架模式(MVVM)的一种
  2. 核心思想:都是将应用分层。
  3. 拆解名词:MV系列架构中,M和V分别指Model层和View层,但其功能会因为框架的不同而变化。
    • Model层是数据模型,用来存储数据;
    • View层是视图,展示Model层的数据。
    • 总结:虽然在不同的框架中,Model层和View层的内容可能会有所差别,但是其基础功能不变,变的只是 数据的传输方式

4、Web1.0时代

  1. Web1.0时代
    • 前/后端未分离阶段,在Web1.0时代,并没有前端的概念。
    • 开发一个应用多数采用ASP.NET/Java/PHP编写,项目通常由多个.aspx/.jsp/.php文件构成,每个文件同时包含了HTML、CSS、JavaScript、C#/Java/PHP代码。
  2. 服务端比较重
    • 有些内容横跨服务端和客户端。
    • JSP在服务端生成,调用server获取数据,在jsp页面中进行封装,把前端的代码混成一个,返给前端。
  3. 优势及劣势
    • 这种架构的好处是简单快捷,但是,缺点也非常明显:JSP代码难以维护,前后端未分离,混合在一起,没有前端的概念,后端人员责任较重。

4.1、后端MVC

  1. 为了让开发更加便捷,代码更容易维护,前后端职责更清晰,便衍生出了MVC开发模式框架
  2. 典型的框架就是Java(Spring、 Structs、 Hibernate).Net(ASP.NET MVC)
  3. 这时的MVC仅限于服务端
    在这里插入图片描述

4.1、存在问题

  1. 前端页面开发效率不高 => 后端人员兼顾前端开发,页面效果又不是很完美
  2. 前后端职责不清 => 一定的分离,未彻底分离,view层,依赖jsp实现模板文件的渲染

5、Web2.0时代—当前时代

  • 自从Gmail的出现,Ajax技术风靡全球。
  • 有了Ajax技术之后,前/后端的职责更加清晰了,因为前端可以通过Ajax后端进行数据交互。

1在这里插入图片描述

6、前端MVC(Model-View-Controller)

  1. 前端MVC后端类似,M(Model)模型,V(View)视图,C(controller)控制器。
  2. 它是MVC、MVP、MVVM这三者中最早产生的架构,其他两个架构模式是以它为基础发展而来的。
    在这里插入图片描述

6.1、存在问题

  1. 数据流混乱,可维护性太差。控制器可以修改模型,模型变了,会修改视图;但是也会有视图变了,修改模型。最后是视图修改的模型,还是控制器该的模型,不确定。
  2. 由于很多开发者会在view层写逻辑代码,导致view层庞大,而控制层Controller变得单薄(就是简单的数据监听,再调用model层的更改逻辑)。
  3. 在前端开发中,缺少MVP开发模式,是因为AngularJS早早的将MVVM架构模式带入了前端。MVP模式在前端开发中并不常见,但是在安卓、IOS等原生开发中,比较常见。

7、MVP(Model-View-Presenter)

  1. 传统的MVC模式虽然可以管理页面系统中的数据,视图,控制器,但是在视图层创建界面时常常会用到模型层内的数据,使模型层和视图层耦合在一起,降低了复用性和灵活性。
  2. MVP与MVC很接近,P指的是Presenter, Presenter可以理解为一 个中间人,它负责着View和Model之间的数据流动,防止View和Model之间直接交流。

7.1、存在问题

  1. 由于View层和Model层都需要经过Presenter层,导致Presenter层比较复杂,维护起来也会有一定的问题;
  2. 而且,因为没有绑定数据,所有数据都需要Presenter层进行“手动同步”,代码量较大,虽然比起MVC框架好很多,但还是有比较多冗余部分。

8、MVVM模式

  • 为了让View层和Model层的数据始终保持一致,MVVM框架出现了。
  • MVVM是前端视图层的概念,主要关注于 视图层分离,也就是说:MVVM把前端的视图层,分为了 三部分 Model, View , VM ViewModel(视图模型)

在这里插入图片描述

  1. MVVM是这样分割的:M、V、VM。
  2. 上图中最右边的就是M—>model,最左边就是V—>View,中间就是VM—>ViewModel,VM起到连接HTML和JSON数据的桥梁作用。
  3. 如果JSON数据层改变,那么就通过VM在内存中维护的 虚拟 DOM 重新点对点刷新 View 界面,点对点起到提高效率作用;
  4. 然后,如果View的某个地方有数据改变,比如用户在input标签里输入内容,有数据变动,那么就映射到Model里面,这就是VM的监听作用。

8.1、特性

  1. 数据驱动视图
    • 好处:当Model层发生数据变化时,页面会自动重新渲染。开发人员只维护好数据的变化,页面结构会被VM会自动渲染出来。
    • ViewModel通过实现一套数据响应式机制自动响应ModeI中数据变化,同时,Viewmodel会实现一套更新策略自动将数据变化转换为视图更新。
    • 注意:数据驱动视图是单向的数据绑定
  2. 双向数据绑定
    • 前面学习原生JS时,表单收集用户输入,通过ajax提交数据。
    • 用户在填写表单时,双向数据绑定可以帮助开发人员在不操作DOM的前提下,自动把用户填写的内容同步到数据源中
    • 页面中的input值发生变化,vm会自动把最新的值取出来,更新到数据。
    • 好处:开发人员不再需要手动操作DOM元素,来获取表单元素输入的最新值;js数据的变化,会被自动渲染到页面上。

9、总结

  1. 这三个架构模式,反应了前端领域的发展进程,共同目标都是职责划分(分层),解决model层view的耦合度问题,切分成功能鲜明的各个层,提高可读性和可维护性。
  2. MVC模式出现较早主要应用在后端,如Spring MVC、ASP.NET MVC等,随着Ajax出现,有了纯粹的前端。它的优点是分层清晰,缺点是数据流混乱,灵活性不高,带来维护性问题。
  3. MVP模式在是MVC的进化形式,Presenter作为中间层负责MV通信, 解决了两者耦合问题,但P层过于臃肿会导致维护问题。
  4. MVVM模式在前端领域有广泛应用。 跟 MVP 架构对比:MVVMViewModel层把Model层和View 层的数据同步自动化了,解决了 MVP 架构中数据同步比较麻烦的问题,不仅减轻了 ViewModel 层的压力,同时使得数据处理更加方便,只需告诉 View 层展示的数据是 Model 层中的哪一部分即可。
  5. Vue.js 是一个提供了 MVVM 风格的双向数据绑定的 Javascript 库,专注于View 层,它的核心是 MVVM 中的 VM,也就是 ViewModel。 ViewModel负责连接 View 和 Model,保证视图和数据的一致性,这种轻量级的架构让前端开发更加高效、便捷。

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

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

相关文章

2.安卓逆向-初识java语言

免责声明:内容仅供学习参考,请合法利用知识,禁止进行违法犯罪活动! 内容参考于:图灵Python学院 上一个内容:1.安卓逆向-说明 关于java语言的介绍就不写了没啥用直接开始 首先java语言写的代码运行说明 …

kolors文生图框架安装

环境安装 根据Kolors【github】的指引,安装命令如下: apt-get install git-lfs git clone https://github.com/Kwai-Kolors/Kolors cd Kolors conda create --name kolors python3.8 conda activate kolors pip install -r requirements.txt python3 s…

Vue3+TS项目封装SVG图标显示组件vite-plugin-svg-icons插件使用

准备好svg文件 假设从iconfont-阿里巴巴矢量图标库下载了一个svg格式的图标,放在我们项目里,并重命名为ic_money.svg,相对路径为:src\assets\images\icons\ic_money.svg 安装vite-plugin-svg-icons插件 npm install vite-plugi…

常用电路及分析

前言 最近在研究一些简单的硬件知识,把在网上看到的一些常见电路分析总结了一下。 有纰漏请指出,转载请说明。 学习交流请发邮件 1280253714qq.com 串联稳压电路 三极管串联线性稳压电路原理详解及Multisim仿真_三极管稳压电路-CSDN博客 线性稳压电…

Java小白一文讲清Java中集合相关的知识点(八)

HashMap底层机制及源码剖析 HashMap底层维护了Node类型的数组table,默认为null 当创建对象时,将加载因子初始化为0.75; 当添加key-value时,通过key的哈希值得到在table的索引,然后判断该索引处是否有元素,如果没有元…

力扣 — — 2555. 两个线段获得的最多奖品

力扣 — — 2555. 两个线段获得的最多奖品 一、题目描述 题目大意:给定一个数组prizePositions,数组中的值表示的是奖品的位置,每一个位置可以有多个奖品,并且设定一个线段的长度 K K K,要求从所有奖品位置中选择两个…

修改Netty 中EventLoopGroup的线程名字前缀

此方案针对 netty 4 , 阅读Netty 源码的过程中涉及到多种线程跳转,2-1 3-1 4-1 类似的命名头晕眼花,直接改了成方便辨认的名字吧! 代码如下: public static EventLoopGroup getEventLoopGroup(String name, int nThread) {Defaul…

第十一周:机器学习

第十一周周报 摘要Abstract机器学习1. 注意力机制(下)1.1 multi-head self-attention(多头注意力机制)1.2 Positional Encoding(位置编码)1.3 truncated self attention(截断式注意力机制&#…

SVGJS使用

svgjs用于操作 SVG 和动画的轻量级库。 官网 SVG.js v3.2 |家 (svgjs.dev) 1、安装 npm install svgdotjs/svg.js 或者下载直接引用 2、使用 <script src"https://cdn.jsdelivr.net/npm/svgdotjs/svg.js3.0/dist/svg.min.js"></script> import { S…

Win11 22H2/23H2用户速来!9月更新补丁KB5043076已发布

系统之家于9月11日发出最新报道&#xff0c;微软针对Win11用户发布了9月最新的更新补丁KB5043076&#xff0c;22H2用户升级系统后&#xff0c;版本号升至22621.4169&#xff0c;23H2用户的系统版本也升至22631.4169。此次更新支持用户从Windows分享窗口将内容共享到安卓设备。以…

95. UE5 GAS RPG 实现创建多段飞弹攻击敌人

从这篇开始&#xff0c;我们将实现一些技能&#xff0c;比如多段火球术&#xff0c;闪电链等等。 在这一篇里&#xff0c;我们先实现多段火球术&#xff0c;技能可以通过配置发射出多个火球术进行攻击。 创建多段火球函数 首先在我们之前创建的RPGFireBolt.h类里面增加一个生…

k8s的环境配置

一、前期系统环境准备 准备3台主机&#xff1a;硬盘50G cpu2个 内存2G 1、3台主机同时配置 1&#xff09;关闭防火墙与selinux、NetworkManager [rootk8s-master ~]# systemctl stop firewalld[rootk8s-master ~]# systemctl disable firewalldRemoved symlink /etc/systemd/…

ctfshow-web入门-sql注入-web248-UDF 注入

udf 全称为&#xff1a;user defined function&#xff0c;意为用户自定义函数&#xff1b;用户可以添加自定义的新函数到 Mysql 中&#xff0c;以达到功能的扩充&#xff0c;调用方式与一般系统自带的函数相同&#xff0c;例如 contact()&#xff0c;user()&#xff0c;versio…

VUE实现刻度尺进度条

一、如下图所示效果: 运行后入下图所示效果: 实现原理是用div画图并动态改变进度, 二、div源码 <div style="width: 100%;"><div class="sdg_title" style="height: 35px;"><!--对话组[{{ dialogGroup.index }}]编辑-->&…

如何在微信中使用AI智能回复,真AI大模型;微加机器人免费智能回复功能

之前一直想实现在微信中使用AI大模型进行消息回复&#xff0c;也使用过很多开源的工具自己调OpenAI的API&#xff0c;但是整体太复杂&#xff0c;而且跑在自己电脑上也不稳定 今天发现微加机器人也支持AI回复&#xff0c;而且AI功能还是免费的&#xff0c;没有tokens收费 微加…

【Gephi】可视化教程

此教程专供欣欣向荣及其舍友使用 文章目录 导入数据上色改变布局设置节点大小统计拓扑结构输出图形保存文件 导入数据 点击【文件】-【导入电子表格】 先选择csv格式的network 直接下一步 点击完成 【图的类型】改为“有向的” 点击确认 会弹出报错&#xff0c;直接clos…

CSS 响应式设计(补充)——WEB开发系列36

随着移动设备的普及&#xff0c;网页设计的焦点逐渐转向了响应式设计。响应式设计不仅要求网页在各种屏幕尺寸上良好展示&#xff0c;还要适应不同设备的特性。 一、响应式设计之前的灵活布局 在响应式设计流行之前&#xff0c;网页布局通常是固定的或流动的。固定布局使用固定…

vc-upload源码分析 -- ant-design-vue系列

vc-upload源码分析 – ant-design-vue系列 1 整体结构 上传组件的使用分两种&#xff1a;点击上传和拖拽上传。 点击的是组件或者是卡片&#xff0c;这个是用户通过插槽传递的。除上传外的其他功能&#xff0c;比如预览、自定义文件渲染等功能&#xff0c;也不是上传的核心功…

2. 变量和指令(omron 机器自动化控制器)——1

机器自动化控制器——第二章 变量和指令 1 2-1 变量一览表MC通用变量轴变量▶ 轴组变量 运动控制指令的输入变量输入变量的有效范围▶ 枚举体一览表 运动控制指令的输出变量运动控制指令的输入输出变量 2-1 变量一览表 MC功能模块使用的变量分为两类。 一类是监视轴等的状态及…

【SQL】百题计划:SQL对于空值的比较判断。

[SQL]百题计划 方法&#xff1a; 使用 <> (!) 和 IS NULL [Accepted] 想法 有的人也许会非常直观地想到如下解法。 SELECT name FROM customer WHERE referee_Id <> 2;然而&#xff0c;这个查询只会返回一个结果&#xff1a;Zach&#xff0c;尽管事实上有 4 个…