回顾往昔。
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之先河,等发现不合理之处时再回头为时已晚……
有的是新星,在尚未开垦的荒原上东一锄头,西一锄头,大部分刨出来的都是石头,但说不定哪天就发现了金矿。
代码会老去,待在一块硬盘里无人问津。
编码人员也会老去。
而只有思想,永远熠熠生辉。
那些合理的抽象层,将会化作坚石,继续支撑新生代的编码人员去构建更复杂的信息世界。
倘若新技术的突破摧毁了如今所有的抽象层(比如新型计算机的出现且成为主流),那也不打紧,不要忘了,构建抽象层背后的东西可被我们藏得好好的嘞。

更多文章请关注《万象专栏》