前端学习——关于前端框架的思考

前端框架

我们知道在AngularJS,react,vue等前端框架出现之前,前端开发都是通过js直接操作dom树来实现的,而有了前端框架之后,前端开发基本上不需要在直接操作dom树,相当于在原生html的dom树之间和前端程序员之间添加了一个中介,程序员通过这个中介来操作dom,本身并不操作dom。

而既然多了这么一个"中介",那么前端程序员想通过框架进行前端开发,那么就要遵守这些框架的规则,比如每个前端框架都有一些自己拥有的特殊的语法或指令。

比如,vue就是通过把vue的实例对象挂载到html的一个dom节点上,然后以此为基础,所有基于vue框架的开发,都是通过这个vue对象来实现对实际dom的操作,而这个节点也被称为vue的根节点。而挂载方式是通过vue对象的#el属性或者$mount函数实现的(基于vue-cli开发的vue项目,挂载操作是在main.js文件中实现的)

当然,前端框架也提供了一大堆对dom进行操作的一些方法和逻辑,比如vue提供的指令,如最常用的v-bind: 数据绑定指令(简写为:),v-on: 事件指令(简写为@)等,还有如循环v-for指令,其有一个key属性,是vue专门用来做diff匹配用的, 可能很多人学vue的时候都会很奇怪为什么使用v-for指令还要指定一个key。

为什么要有前端框架?

那么可以直接使用js操作dom开发,为什么还要有前端框架这个"中介"呢,而且每多加一层就需要更多的时间,导致运行效率更低。

首先是因为使用js开发效率太低,使用js或者jquery开发时,需要写大量的操作dom的js代码,而且看起来很杂乱,很多时候想看明白一个存js开发的前端项目,不但要懂基础的js语法,html语法等,还要有足够的项目经验,否则可能根本就看不懂。

其次,使用了前端框架之后,不但能够增加开发的效率,而且事实上可能没减少运行效率,反而间接提升了运行效率。

因为,如果直接使用js操作dom ,那么所有的dom操作都是真实的,也就是说js每次都是在真实的dom上进行操作,这样浏览器就需要不停的进行dom的解析和渲染。

而使用了前端框架之后,比如vue有虚拟dom的功能,使用vue开发时,涉及到dom操作,这时vue引擎会先生成一个虚拟dom,然后通过虚拟dom和真实dom进行匹配,也就是diff算法,如果dom以存在且数据没有改变,这时就不需要操作这个dom了,而发现真实dom中不存在或不一致的dom时,才会真正的去操作dom,这样就减少了频繁修改dom的问题。

比如,需要实现一个列表展示的功能,如果直接使用js操作,这时就需要自己写一个循环遍历的功能,然后去创建dom节点展示数据,但当你需要在列表中新增一列时,你就需要把旧列表给闪电,然后重新根据数据生成一个新的列表。

但如果使用的是前端框架开发,比如vue,这时vue就会根据新的数据创建一个虚拟列表的dom, 然后把虚拟列表中的dom节点和数据与真实dom节点和数据进行匹配。当新增一列时,虚拟dom发现真实dom中没有这个新增的一列时,这时vue才会操作真实dom直接增加一列dom节点即可,而不用把整个列表dom全部删掉,然后重新生成。

相关推荐
a11177610 分钟前
3D 脑图谱 / Bilingual 3D Brain Atlas 项目
前端
T1mzhou17 分钟前
ARM64 Linux 6.10内核启动流程2-rootfs 怎么挂上
linux·服务器·前端
小雨笙笙1 小时前
机器学习:线性回归学习
学习·机器学习·线性回归
HugoStudio_SWAN1 小时前
洛谷 P1420 / P1179 / B4262 最长连号、数字统计与词频统计——统计的三种面孔
c++·学习·程序人生·算法
小小尚@1 小时前
WebGIS/ECharts 地图开发|MapLand 在线行政区划边界一键下载 GeoJSON 工具
前端·javascript·echarts
是隼人1 小时前
buuctf-pwn [HarekazeCTF2019]baby_rop2(64位ret2libc)题解(学习过程持续更新)
c语言·学习·安全·pwn入门·ctf入门
默_笙2 小时前
🚍 一条 Todo 的奇幻漂流:TypeScript 全栈类型安全的"护照检查"
前端·javascript
计算机魔术师2 小时前
NVIDIA 以 129.3 亿美元收购 Hugging Face
前端
平头哥技术团队2 小时前
Day 01 | 用 HTML 写第一个网页:双击就能在浏览器打开
前端
aprilaaaaa3 小时前
(TC397 学习笔记)二、ICU和TIM的时钟计算
笔记·学习·fpga开发