前端框架变迁史

前端框架变迁史

过去的前端

JQuery

  1. 简单的选择器和链式操作
  2. 跨浏览器兼容性
  3. 强大的动画功能
  4. 简单的 Ajax 支持
  5. 插件系统

MVVM 模式

什么是 MVVM

什么是 MVVM ?

现在的前端

主流技术

react VUE angular

作为现代前端框架,有如下 4 个共有的特点:

  • 状态管理
  • 支持组件化开发
  • 有配套的前端路由库
  • 有配套的状态管理库

接下来我们来重点对比一下 Vue 和 React 这两个框架的异同。

1. 视图描述

Vue 使用的是模板进行描述
React 使用的是 JSX 进行描述

不同的描述方式体现了两个团队不同的设计哲学。

React 团队认为,UI(HTML)本质上和逻辑(JS)存在耦合部分。作为前端开发工程师,JS 是用得最多的,因此它们考虑屏蔽 HTML,全部使用 JS 来描述 UI,这样子就可以让 UI 和 逻辑配合更紧密。因此他们设计出了 JSX
出发的角度是从前端出发的。

而模板刚好相反,是从后端的角度出发的。本质上是扩展了 HTML,在 HTML 中加入了相关逻辑的语法。

总结一下:

  • JSX 的出发点:既然前端使用 JS 描述逻辑,就扩展 JS 语法,让它能够描述 UI。
  • 前端模板的出发点,前端框架使用 HTML 来描述 UI,那就扩展 HTML 语法,让它能够书写一定的逻辑
2. 虚拟 DOM

关于虚拟 DOM,React 团队官方的定时是描述真实 DOM 的一种方式。虚拟 DOM 是一种理念,实现的方式可以是多种多样的,只要你能够通过一种方式来描述真实 DOM,那么就是虚拟 DOM 的一种实现方案。

一说到虚拟 DOM,有人就会误认为虚拟 DOM 一定比原生操作 DOM 快,这种认识也是错的。

假设我就是单纯的创建一个 DOM:

let newP = document.createElement("p");
document.body.appendChild(newP);

这里的话,原生 DOM 的方式一定是比虚拟 DOM 更快的。因为即便是虚拟 DOM,最终也是要去操作真实的 DOM。

根据 React 团队的研究,大家平时在操作 DOM 的时候,比起使用原生的 API 去操作 DOM,更喜欢使用 innerHTML

document.body.innerHTML = `<p>asdasdasd</p>
`;

那么此时,使用 innerHTML 就涉及到两个层面的计算

  • JS 层面:解析字符串
  • DOM 层面:创建对应的 DOM 节点
innerHTML虚拟 DOM
JS 层面解析字符串创建 JS 对象
DOM 层面创建对应的 DOM 节点创建对应的 DOM 节点

因此可以看出,在第一次创建 DOM 节点的时候,虚拟 DOM 和传统的 innerHTML 的方式,至少都有两个层面的计算。

虚拟 DOM 真正发挥威力的时候,是在更新的时候。innerHTML 需要重新赋值,重新赋值意味着之前创建的 DOM 节点全部销毁。但是虚拟 DOM 会通过 diff 算法只更新必要的 DOM 节点

innerHTML虚拟 DOM
JS 层面解析字符串创建 JS 对象
DOM 层面销毁原来所有的 DOM修改必要的 DOM 节点
DOM 层面创建对应的 DOM 节点

虚拟 DOM 还有一个好处?
多平台渲染的抽象能力。虚拟 DOM 可以对接不同的宿主环境,实现一个框架,多端渲染。

3. Fiber
  1. React 为什么要从以前的 Stack 架构改为 Fiber 架构 ?

  2. Vue 是否需要 Fiber 架构 ?

要想把这两个问题搞清楚,首先需要搞清楚 Vue 和 React 设计上面的区别。

React 是否是响应式?Vue 是否是响应式 ?

React 不是响应式设计,而 Vue 是响应式设计,这意味 React 中当状态发生改变后,React 不知道是哪个改变了,需要通过 diff 算法计算后才知道。而 Vue 是响应式的,意味着一旦有数据发生变化,Vue 是知道的。

正因为这两种选择的不同,导致了两种框架在后面的发展中产生了巨大的区别。

React 这种设计,每次需要计算整颗虚拟 DOM,这个是属于 JS 层面的计算,虽然速度很快,但是一旦你的虚拟 DOM 数的体量很大,还是会消耗很长的时间。这意味浏览器本来要绘制下一帧了,但是你还在执行 JS,又不能打断。

从 React16 开始,官方引入了 Fiber 的概念,使用链表的方式来描述 UI,之所以采用链表,是因为中途能够打断。

官方两种架构的对比示例:https://claudiopro.github.io/react-fiber-vs-stack-demo/

Vue 不需要 Fiber 架构。因为 Vue 不存在像 React 一样要计算整颗虚拟 DOM 树这种要消耗大量时间的计算。Vue 是响应式的,Vue 本身也遇到了自身的瓶颈,那就是 watcher 太多了。

Vue 的解决方案就是引入虚拟 DOM,将虚拟 DOM 和响应式结合了起来,也就是改变了响应式的粒度。

未来展望

在这里插入图片描述

svelte 的部分代码
在这里插入图片描述

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

操作细节无遗漏:上海迅软DSE如何精准记录用户不规范行为

企业在部署加密软件后&#xff0c;虽然数据信息得到了加密保护&#xff0c;但难免会发生内部人员滥用管理身份职权&#xff0c;随意解密、外发文件等情况&#xff0c;造成明明对数据加密了&#xff0c;却还是无法完全掌控数据使用情况的现象发生&#xff0c;因此审计功能变得尤…

抖店和商品橱窗有什么区别?新手应该选哪个?

我是电商珠珠 临近年底了&#xff0c;有的人已经开始为下一年筹谋&#xff0c;有的去抖音做账号做直播带货&#xff0c;不会直播带货的就想尝试做下抖店&#xff0c;来为以后的经济打基础。 刚想要接触却对这类有些迷糊&#xff0c;发现商品橱窗和抖店都可以卖货&#xff0c;…

天融信TOPSEC安全管理系统存在远程命令执行漏洞

文章目录 产品简介漏洞概述指纹识别漏洞利用修复建议 产品简介 天融信TopSec 安全管理系统&#xff0c;是基于大数据架构&#xff0c;采用多种技术手段收集各类探针设备安全数据&#xff0c;围绕资产、漏洞、攻击、威胁等安全要素进行全面分析&#xff0c;提供统一监测告警、集…

MySQL基础学习: linux系统mysql 密码插件 validate_password安装

1、没有安装mysql密码插件&#xff0c;执行命令&#xff1a;SHOW VARIABLES LIKE ‘validate_password%’; 2、安装mysql密码插件&#xff0c;执行命令&#xff1a;install plugin validate_password soname ‘validate_password.so’; 3、再次执行&#xff1a;SHOW VARIABLE…

嵌入式视频播放器(mplayer)

1.文件准备&#xff1a; MPlayer-1.0rc2.tar.bz2 libmad-0.15.1b.tar.gz 直接Git到本地 git clone https://gitee.com/zxz_FINE/mplayer_tarball.git 2.文件夹准备&#xff1a; src存放解压后的源码文件&#xff0c;target_Mplayer存放编译安装的目标文件 mkdir src targe…

通过CANopen转Modbus TCP网关的伺服系统

通过开疆CANopen转Modbus TCP网关的伺服系统&#xff0c;我们能够实现CANopen协议与Modbus TCP协议之间的无缝转换&#xff0c;从而为伺服电机的通讯和控制带来更大的便利和灵活性。 首先我们可以通过CANopen协议与伺服电机进行通讯。CANopen协议是一种先进的、高效的通讯协议&…

7+WGCNA+机器学习+泛癌生信思路,非肿瘤也能结合泛癌分析

今天给同学们分享一篇生信文章“Analysis and Experimental Validation of Rheumatoid Arthritis Innate Immunity Gene CYFIP2 and Pan-Cancer”&#xff0c;这篇文章发表在Front Immunol期刊上&#xff0c;影响因子为7.3。 结果解读&#xff1a; DEG筛选和数据预处理 数据在…

舞动指尖的代码之旅

嗨&#xff0c;伟大的程序员们&#xff01; 随着2023年的尾声临近&#xff0c;我回顾这一年的使用 Vim 的心得体会&#xff0c;愿与你分享我的点滴成长。 初尝 Vim 之苦与乐 在开始使用 Vim 时&#xff0c;曾有过一些困惑和挫折。但正是在不断的摸索中&#xff0c;我领略到了…

shell 切片参数解释

result"set-cookie: versionv1; Max-Age2592000" result${result:20:22}本来只想要 version 结果 v1&#xff0c;第一次使用一直输出这么长&#xff0c;仔细研究才发现第二个参数的含义是切片的长度 改为以下语句后成功输出 version 对应的值 result"set-cook…

openmediavault(OMV) (26)网络(1)ddns-go

简介 "ddns-go" 是一个动态域名解析(Dynamic DNS)工具,用于更新域名的IP地址。它可以自动检测你的公共IP地址,并将其更新到指定的域名解析服务商,以确保你的域名始终与最新的IP地址相匹配。 安装 hub.docker.com上下载ddns-go镜像 配置compose文件 --- versio…

【刷题日志】深度理解除(/)与取模(%)附水仙花数以及变种水仙花数题解

文章目录 &#x1f680;前言&#x1f680;除与取模&#x1f680;水仙花数&#x1f680;变种水仙花数 &#x1f680;前言 本专栏文章都直奔刷题主题&#xff0c;阿辉都不会在废话了&#xff0c;加油&#xff0c;少年&#xff01;&#xff01;&#xff01; &#x1f680;除与取…

李宏毅机器学习第二十三周周报 Flow-based model

文章目录 week 23 Flow-based model摘要Abstract一、李宏毅机器学习1.引言2.数学背景2.1Jacobian2.2Determinant2.3Change of Variable Theorem 3.Flow-based Model4.GLOW 二、文献阅读1. 题目2. abstract3. 网络架构3.1 change of variable formula3.2 Coupling layers3.3Prop…