前端MVVM框架之我见

回顾往昔。
1989年World Wide Web初现。
1990年所有工具开发完成,1991年公布第一个网站(http://info.cern.ch)。
1993年Web协议和代码免版税。
1994年W3C成立。
……
HTTP、HTML、CSS、JavaScript、浏览器,或完善,或创造,一个连接信息的万维网出现了。
如今,已是2021年,三十多年的发展,Web世界早已变得缤纷多彩(信息的低成本共享无疑极大促进了经济总量的绝对增长)。
随之而来的,是页面越来越“重”。
人与网页间的交互变得频繁,网站表现的,越来越像是一个应用。
Web在蓬勃发展。
需求迫使人们做出改变(各项标准的推进)。
站点增长速度的上升让我们尽可能的想办法来复用代码(库)。
单站点代码量的剧增让我们不得不想出新的办法来重新组织代码(框架)。
JS也从一个玩具型的脚本语言成长为一门完善的现代编程语言。
时至今日,MVVM类型的前端框架已经成为主流。
React,Vue,Angular三分天下。
Svelte之流虽是后起之秀,但在格局已然稳定的今天,实难逆天改命。
此外,还有砥砺前行的老将(Ember,Knockout),缓缓升起的新星(Inferno)……
前端框架细数起来,实在多如牛毛(Github上有个前端框架跑分的项目,那里列举的应该是比较全的)。
今天,笔者就简单说说对三大框架的少许见解,疏漏不足之处,请多多包涵。
从根本上说,现代的前端框架都是MVVM模式,核心的功能就是【开发者声明数据和视图的关系,由框架去同步UI和状态】。
由此来看,三大框架无本质区别,在生态完善的情况下,选择哪个都是个人喜好(说的直白一点,对哪个熟悉,喜欢哪个就用哪个)。
不同点,分【数据驱动的实现方式】和【框架抽象工具/程序组织范式】两部分来说。
第一部分。
Vue,模板编译(找出数据与视图的对应关系),数据驱动,对每个数据生成get/set方法,数据发生变动时,入栈,每次事件循环结束时,进行对应DOM操作。
Angular,模板编译(找出数据与视图的对应关系),事件驱动,触发异步时,对数据进行“脏检查”,找到发生变动的数据,进行相应DOM操作。
React,主动驱动,Virtual DOM + DIFF算法。
这里的精华在于各种实现方式背后的思想,不要强行排名,没必要。
第二部分。
仅罗列一些关键词,具体的思考因人而异,就目前的业务场景来说,哪一方都没有绝对的优势。
此外,Angular本身就是工程化的代表,大而全,是个真正的框架。
Vue和React核心只是个视图库,和周边生态结合起来再加上一些约定俗成才能称为框架。
模板、Virtual DOM、TypeScript、依赖注入、类、函数式、组件、数据流……
最后。
React的思想无疑是革命性的,组件化(合理的抽象),Virtual DOM,视图=fn(状态),函数式,单项数据流……
但,其他框架亦有其出彩之处。
不单单是Vue和Angular,还有很多没有提到的框架。
有的是先驱,开MVVM之先河,等发现不合理之处时再回头为时已晚……
有的是新星,在尚未开垦的荒原上东一锄头,西一锄头,大部分刨出来的都是石头,但说不定哪天就发现了金矿。
代码会老去,待在一块硬盘里无人问津。
编码人员也会老去。
而只有思想,永远熠熠生辉。
那些合理的抽象层,将会化作坚石,继续支撑新生代的编码人员去构建更复杂的信息世界。
倘若新技术的突破摧毁了如今所有的抽象层(比如新型计算机的出现且成为主流),那也不打紧,不要忘了,构建抽象层背后的东西可被我们藏得好好的嘞。

原文地址:https://www.cnblogs.com/beiyudaoke/p/15432351.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


react 中的高阶组件主要是对于 hooks 之前的类组件来说的,如果组件之中有复用的代码,需要重新创建一个父类,父类中存储公共代码,返回子类,同时把公用属性...
我们上一节了解了组件的更新机制,但是只是停留在表层上,例如我们的 setState 函数式同步执行的,我们的事件处理直接绑定在了 dom 元素上,这些都跟 re...
我们上一节了解了 react 的虚拟 dom 的格式,如何把虚拟 dom 转为真实 dom 进行挂载。其实函数是组件和类组件也是在这个基础上包裹了一层,一个是调...
react 本身提供了克隆组件的方法,但是平时开发中可能很少使用,可能是不了解。我公司的项目就没有使用,但是在很多三方库中都有使用。本小节我们来学习下如果使用该...
mobx 是一个简单可扩展的状态管理库,中文官网链接。小编在接触 react 就一直使用 mobx 库,上手简单不复杂。
我们在平常的开发中不可避免的会有很多列表渲染逻辑,在 pc 端可以使用分页进行渲染数限制,在移动端可以使用下拉加载更多。但是对于大量的列表渲染,特别像有实时数据...
本小节开始前,我们先答复下一个同学的问题。上一小节发布后,有小伙伴后台来信问到:‘小编你只讲了类组件中怎么使用 ref,那在函数式组件中怎么使用呢?’。确实我们...
上一小节我们了解了固定高度的滚动列表实现,因为是固定高度所以容器总高度和每个元素的 size、offset 很容易得到,这种场景也适合我们常见的大部分场景,例如...
上一小节我们处理了 setState 的批量更新机制,但是我们有两个遗漏点,一个是源码中的 setState 可以传入函数,同时 setState 可以传入第二...
我们知道 react 进行页面渲染或者刷新的时候,会从根节点到子节点全部执行一遍,即使子组件中没有状态的改变,也会执行。这就造成了性能不必要的浪费。之前我们了解...
在平时工作中的某些场景下,你可能想在整个组件树中传递数据,但却不想手动地通过 props 属性在每一层传递属性,contextAPI 应用而生。
楼主最近入职新单位了,恰好新单位使用的技术栈是 react,因为之前一直进行的是 vue2/vue3 和小程序开发,对于这些技术栈实现机制也有一些了解,最少面试...
我们上一节了了解了函数式组件和类组件的处理方式,本质就是处理基于 babel 处理后的 type 类型,最后还是要处理虚拟 dom。本小节我们学习下组件的更新机...
前面几节我们学习了解了 react 的渲染机制和生命周期,本节我们正式进入基本面试必考的核心地带 -- diff 算法,了解如何优化和复用 dom 操作的,还有...
我们在之前已经学习过 react 生命周期,但是在 16 版本中 will 类的生命周期进行了废除,虽然依然可以用,但是需要加上 UNSAFE 开头,表示是不安...
上一小节我们学习了 react 中类组件的优化方式,对于 hooks 为主流的函数式编程,react 也提供了优化方式 memo 方法,本小节我们来了解下它的用...
开源不易,感谢你的支持,❤ star me if you like concent ^_^
hel-micro,模块联邦sdk化,免构建、热更新、工具链无关的微模块方案 ,欢迎关注与了解
本文主题围绕concent的setup和react的五把钩子来展开,既然提到了setup就离不开composition api这个关键词,准确的说setup是由...
ReactsetState的执行是异步还是同步官方文档是这么说的setState()doesnotalwaysimmediatelyupdatethecomponent.Itmaybatchordefertheupdateuntillater.Thismakesreadingthis.staterightaftercallingsetState()apotentialpitfall.Instead,usecom