当前位置: 首页 > 科技观察

JavaScript框架大战结束,只有一个

时间:2023-03-21 17:39:37 科技观察

竞争者框架大战是JavaScript社区的热门话题,也是业界众多圣战之一。一开始是jQuery的出现,然后是AngularJS先是出现,再到现代框架的混战,战火愈演愈烈。如今,许多竞争对手,如Backbone或Sencha,都已半途而废:只留下大量必须维护的遗留代码。令人惊奇的是,其他幸存者,如jQuery,仍然拥有庞大的社区。其他的,比如Angular,似乎并没有像预期或承诺的那样起飞。jQuery它可能是现存最古老的竞争者。它非常流行,因为它解决了浏览器之间的互操作性,但它的应用程序很难扩展。今天,jQuery不是主流,也不是大多数项目的最佳选择。$(document).ready(()=>{$("#app").html("HelloWorld!");});AngularJS处于LTS模式,退居二线以支持其老大哥。但毫无疑问,这是框架生态系统的一次巨大飞跃,至今仍有很多人怀念它。但是,由于不再主动维护,它不再是竞争者。angular.module("app",[]).controller("HelloWorldCtrl",($scope)=>{$scope.message="HelloWorld!";});Angular在这里与React竞争。AngularJS很老,它存在性能和健壮性问题,随着React越来越好,许多程序员对它刮目相看。因此Angular通过ECMAScript6改进对AngularJS进行了现代化改造,试图完成与React的摊牌。angular.module("app",[]).controller("HelloWorldCtrl",($scope)=>{$scope.message="HelloWorld!";});Angular最突出的困难是其陡峭的学习曲线。它需要理解很多概念,而且不是一下子直接给你的,很多时候会让你绕道而行。学好Angular是很困难的:它继承了AngularJS的学习曲线,但有新的困难,如RxJS或分层依赖注入。原始照片由BenNader提供。另一方面,令人担忧的是Angular也违背了很多承诺。例如,从V2开始就期望有一种创建服务器呈现页面的简单方法,但截至2022年2月24日,如果没有JavaScript,Angular.io网站本身将无法运行。然而,这并不是Angular最大的问题。它最大的问题是碎片化和版本升级。升级版本非常困难,以至于用户不敢冒险升级他们的应用程序。在npm官网上可以看到老版本的用户很多。VueJSVue是许多需要比AngularJS性能更高、更稳定且更易于使用的框架的开发人员的答案。Vue的模板系统非常接近原始的Angular,也保持了AngularJS的简单性,同时它从React中获得了一些强大的功能。但是VueJS在版本1和2中遇到了一个严重的问题:它不能很好地处理数组,作者将此归咎于JavaScript对更新算法的选择不当。如果你不使用像Vuex或Redux这样的库,你可能会遇到严重的问题。您可以看到该应用程序在AngularJS中可用,但在VueJS中不可用。理论上,这个问题已经在版本3中得到修复。但是,将自己的错误归咎于他人在社区中是不合适的。SvelteJS是战争中日益壮大的竞争者,并正在做出巨大的承诺。它声称主要优点是将组件转换为命令式语言,根据他们的说法,这比React采用的声明式语言更好。<脚本>让世界=“世界”;

你好{world}!
使用起来无疑更简单,但是转换为命令式和结果组件并不像看起来那么可预测。在某些情况下,SvelteJS无法正确检测更改。发生这种情况时,状态可能已损坏,而视图未正确更新。这个问题已经引起了很多关注,因此很难证明SvelteJS中的任何项目都是合理的。https://twitter.com/drpicox/status/1496461071334490112StencilJS嗯,从技术上讲,它不是一个框架,尽管它是。StencilJS允许编写组件并将它们转换为其他框架。如今,它将组件转换为Angular、React、Vue和WebComponents组件。从'@stencil/core'导入{Component,Prop,h};@Component({tag:'app'})exportclassMyComponent{@Prop()world:string;render(){return(

你好{this.world}

);然而,这个类有一些奇怪的地方。它类似于另一件事,对吧?有丝分裂你可能没有听说过它,但这就是让我写下这篇文章的原因。Mitosis是Angular的创建者MiskoHevery编写的最新框架。没错,它是继Angular之后Misko创建的又一个框架。从“@builder.io/mitosis”导入{useState};导出默认函数MyComponent(props){conststate=useState({world:"World",});返回
你好{state.world}!
;}Mitosis与StencilJS的目的相同,将其组件转换为许多框架。顺便说一句,代码是不是有点像其他框架?React是最古老的现代框架之一,已经在npm存储库中存在了10多年。尽管它发生了很大变化,但它仍然与大多数以前的版本兼容。一切都变得更好。有人说Reactwithhooks甚至创建了一个更好的框架。从“反应”导入{useState};导出默认函数HelloWorld(){const[world]=useState("World");返回
你好{world}!
;但是React做得最好的不是它有钩子或任何可见的东西,而是它推动了JavaScript的最新标准,并推动了JSX的边界。React不再是一个框架,也许从来都不是,它只是一个库。它努力推动标准,最终将自己从用户代码中移除。获胜者是……JSX。好吧好吧,React,但不是React本身,而是它背后的哲学。React本身是一个库,但它可以被许多其他库替代,例如Preact或ReactNative。但如果你仔细观察,StencilJS或Mitosis与React非常相似并不是巧合,那是因为:“最好的框架是将自己从用户代码中移除的框架。”-勇敢改变是更明智的决定React大量使用JavaScript和JSX(嵌入了XML的JavaScript),用户代码与React无关,只需很少的调整,几乎相同的代码就可以在其他框架中运行。所以,毫无疑问,React是框架战争的赢家。因为它不是用户代码中的框架。注:我最近发现了一个视频:https://www.youtube.com/watch?v=4anAwXYqLG8。他将React描述为一个影响尽可能小的库,这就是我写这篇文章的原因。我很沮丧,因为我花了8年时间才理解它。这就是为什么有这么多框架看起来像React,因为它不是React,它是JavaScript。