百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术文章 > 正文

维护太累了!2024年,我们还需要前端框架吗

ccwgpt 2024-11-12 09:46 15 浏览 0 评论


作者丨Sean Haddock

编译丨诺亚

出品 | 51CTO技术栈(微信号:blog51cto)

我最近遇到了一种观点,认为新的web开发不应该使用前端框架(Angular、React、Vue等),因为要跟上依赖项的新版本,维护负担很大。有人认为这种维护负担是不合理的,因为大多数应用程序不再需要前端框架了。

这是真的吗?让我们在一家大型公司的典型开发团队的背景下研究这种说法,该公司负责许多应用程序——包括To B和To C的应用程序。我将使用Angular作为我的框架示例。

1、从来不需要框架

争论的关键在于,由于JavaScript、CSS和浏览器特性的进步,不再需要框架。但我认为这在某种程度上夸大了事实。框架从来没有被要求做任何事情。前端框架提供JavaScript(在JavaScript中嵌入HTML)和CSS。因此,框架从来没有做过任何不能单独使用JavaScript/CSS完成的事情。他们只是让做这些事情变得更容易,结果是更快。

这与 .NET框架非常相似。当 .NET发布时,没有什么是 C/C++做不到的。.NET框架让Windows开发变得更容易,因此也更快。我还记得当 .NET出现时,C/C++开发人员提出了一些反对意见,他们认为你应该咬紧牙关学习 C/C++。我记得一开始我觉得自己不如那些开发者,因为我使用的框架声明的目的是让事情变得更简单,这感觉就像“作弊”。

但企业希望尽快看到结果。因此,一个使开发更容易和更快的框架将会流行起来,这就是 .NET所发生的事情。当 .NET如此简单,而且更能达成公司所追求的效果时,很难证明投入时间学习C/C++是合理的。

我认为这种情况与前端JavaScript框架类似(现在仍然如此)。当然,你可以用简单的JavaScript/CSS/HTML做所有的事情,但是当有更容易学习和实现的替代方案,并且允许你更快地交付时,很难不去追求这条道路——至少对于那些必须用有限的资源交付许多应用程序的公司来说,更是如此。

2、框架的功能

的确,JavaScript和浏览器特性已经有了很大的进步,其中很多都是由前端框架推动的。ES6对类和模块的支持为我们提供了一种用纯JavaScript构建代码的方法。创建封装功能和通过自定义事件通信的自定义元素的能力使我们能够创建可重用的组件。这些进步使得使用普通JavaScript进行开发比以前更容易。

但我并不确信,在快速构建复杂的web应用程序方面,普通JavaScript与前端框架不相上下。

例如,让我们看一下计数器组件的自定义元素示例。计数器组件是你可以实现的最简单的反应性组件之一,通常用于演示目的。左边是计数器组件作为自定义HTML元素的实现,仅使用普通JavaScript。右边是使用Angular17组件的相同实现。

自定义元素和Angular组件之间的比较

Angular组件的实现所用的行数不到自定义元素的一半。此外,Angular会生成组件的样板,这样我就只需要在红框中编写代码。此外,在Angular的解决方案中,我可以选择将模板移动到它自己的HTML文件中,这是我更喜欢的。如果我们在最简单的组件的实现中看到如此大的差异,那么对于一个复杂的组件,它会是什么样子呢?

另一件需要注意的事情是,Angular会在将值注入DOM之前对它们进行消毒,以防范跨站脚本(XSS)漏洞。这对于这个组件来说不是必需的,但是对于许多其他组件来说是必需的,并且这是团队必须以可重用的方式为自己实现的功能的一个示例。

此外,JavaScript不是一种类型安全的语言——也就是说,直到运行时才会发现类型错误,而且你几乎得不到有用的智能感知。类型检查是否重要是一个单独的话题,但很多人相信它是重要的,这就是为什么Angular使用TypeScript来进行编译时类型检查并提供强大的智能感知。当然,你可以在不使用前端框架的情况下使用TypeScript,但你必须自己负责编译。

最后,像Angular这样的框架提供的不仅仅是一种更简单的方式来创建自定义组件。它们还提供服务和其他功能。举个例子,在Angular中很容易创建一个拦截器,你可以用它来修改所有的HTTP请求。这样的拦截器对于诸如为API调用添加身份验证头值之类的事情非常有用。在下一节中,让我们看看如何自己实现这样的东西。

3、依赖关系不会消失——它们只是转移了

让我们回到上一节刚刚提到的HTTP拦截器的示例。如果我只是使用普通的JavaScript,我将如何实现这一点呢?

首先,我可能会在发出请求的每个地方复制逻辑。我很快就会意识到我违反了DRY原则,并将此逻辑移动到共享模块中,然后在我想要使用它的任何地方导入该模块。但后来我意识到,我希望公司里的其他应用程序也能使用这个功能,所以我把它做成一个库,以便所有应用程序都能以一种有版本的方式使用它。

然后我会意识到不同的应用程序有不同的用例,所以我需要使代码可配置,以便它可以在不同的场景中工作。然后我会意识到,如果能够对同一个请求多次执行此操作就太好了,所以我会想出一种方法,对同一个请求应用多个更改,并按照开发人员确定的顺序执行。

每次对库进行更改时,我都必须了解使用库的不同方式,并注意不要破坏现有的实现。如果本地浏览器API在某些基本方面发生了变化,或者被其他东西所取代,我将希望利用库中的这些变化。事实上,如果有什么变化影响到浏览器的支持,我可能会被迫做出这些改变,并迅速做出改变——也就是说,如果浏览器更新将导致我的解决方案不再工作。

但我可能无法以 100% 向后兼容的方式做到这一点。因此,在这种情况下,我将不得不保留向后兼容的实现,同时还要实现一个新的解决方案,并找出一种方法来迁移我的库的使用者。所有这些都是在没有任何第三方依赖的情况下进行的。但是现在我的组织中的应用程序依赖于这个库,我必须自己维护它。显然,这只是共享功能的一个例子,当然还有很多其他的例子。

4、拥抱开放标准是件好事

但我确实认为,如果我们能够做一些本地支持的事情,我们应该尝试本地做。我相信Angular也认同这一点,随着JavaScript、CSS和浏览器的发展,他们会经常放弃他们的自定义实现。

例如,一旦不再需要自定义解决方案,他们就弃用自定义伸缩盒解决方案,转而使用纯CSS。他们还引入了一种配置方法来使用本机API。Angular也不再使用自己的模块,因为ES6支持模块。

5、结论

我们是使用别人提供的解决方案,还是推出自己的解决方案?这不是一个新问题。一般来说,我认为公司选择使用别人提供的解决方案来加速开发,因为他们没有资源(在技能或数量方面)来实现他们自己的解决方案。

然而,这确实带来了一种权衡,即你必须跟上你引入的依赖项。但我认为,对于许多实现企业应用程序的公司来说,天平仍然倾向于使用前端框架。

参考链接:https://blog.stackademic.com/do-we-still-need-frontend-frameworks-in-2024-2975c27f7016

来源: 51CTO技术栈

相关推荐

迈向群体智能 | 智源发布首个跨本体具身大小脑协作框架

允中发自凹非寺量子位|公众号QbitAI3月29日,智源研究院在2025中关村论坛“未来人工智能先锋论坛”上发布首个跨本体具身大小脑协作框架RoboOS与开源具身大脑RoboBrain,可实...

大模型对接微信个人号,极空间部署AstrBot机器人,万事不求百度

「亲爱的粉丝朋友们好啊!今天熊猫又来介绍好玩有趣的Docker项目了,喜欢的记得点个关注哦!」引言前两天熊猫发过一篇关于如何在极空间部署AstrBot并对接QQ消息平台的文章,不过其实QQ现在已经很少...

Seata,让分布式事务不再是难题!实战分享带你领略Seata的魅力!

终身学习、乐于分享、共同成长!前言Seata是一款开源的分布式事务解决方案,致力于提供高性能和简单易用的分布式事务服务。Seata将为用户提供了AT、TCC、SAGA和XA事务模式,为用户打造一站式的...

常见分布式事务解决方案(分布式事务解决的问题)

1.两阶段提交(2PC)原理:分为准备阶段(协调者询问参与者是否可提交)和提交阶段(协调者根据参与者反馈决定提交或回滚)。优点:强一致性,适用于数据库层(如XA协议)。缺点:同步阻塞:所有参与者阻塞...

分布式事务:从崩溃到高可用,程序员必须掌握的实战方案!

“支付成功,但订单状态未更新!”、“库存扣减后,交易却回滚了!”——如果你在分布式系统中踩过这些“天坑”,这篇文章就是你的救命稻草!本文将手把手拆解分布式事务的核心痛点和6大主流解决方案,用代码实战+...

谈谈对分布式事务的一点理解和解决方案

分布式事务首先,做系统拆分的时候几乎都会遇到分布式事务的问题,一个仿真的案例如下:项目初期,由于用户体量不大,订单模块和钱包模块共库共应用(大war包时代),模块调用可以简化为本地事务操作,这样做只要...

一篇教你通过Seata解决分布式事务问题

1 Seata介绍Seata是由阿里中间件团队发起的开源分布式事务框架项目,依赖支持本地ACID事务的关系型数据库,可以高效并且对业务0侵入的方式解决微服务场景下面临的分布式事务问题,目前提供AT...

Seata分布式事务详解(原理流程及4种模式)

Seata分布式事务是SpringCloudAlibaba的核心组件,也是构建分布式的基石,下面我就全面来详解Seata@mikechen本篇已收于mikechen原创超30万字《阿里架构师进阶专题合...

分布式事务最终一致性解决方案有哪些?MQ、TCC、saga如何实现?

JTA方案适用于单体架构多数据源时实现分布式事务,但对于微服务间的分布式事务就无能为力了,我们需要使用其他的方案实现分布式事务。1、本地消息表本地消息表的核心思想是将分布式事务拆分成本地事务进行处理...

彻底掌握分布式事务2PC、3PC模型(分布式事务视频教程)

原文:https://mp.weixin.qq.com/s/_zhntxv07GEz9ktAKuj70Q作者:马龙台工作中使用最多的是本地事务,但是在对单一项目拆分为SOA、微服务之后,就会牵扯出分...

Seata分布式事务框架关于Annotation的SAGA模式分析

SAGAAnnotation是ApacheSeata版本2.3.0中引入的功能,它提供了一种使用Java注解而不是传统的JSON配置或编程API来实现SAGA事务模式的声明...

分布式事务,原理简单,写起来全是坑

今天我们就一起来看下另一种模式,XA模式!其实我觉得seata中的四种不同的分布式事务模式,学完AT、TCC以及XA就够了,Saga不好玩,而且长事务本身就有很多问题,也不推荐使用。S...

内存空间节约利器redis的bitmap(位图)应用场景有哪些你知道吗

在前面我们分享过一次Redis常用数据结构和使用场景,文章对Redis基本使用做了一个简单的API说明,但是对于其中String类型中的bitmap(位图)我们需要重点说明一下,因为他的作用真的不容忽...

分布式事务原理详解(图文全面总结)

分布式事务是非常核心的分布式系统,也是大厂经常考察对象,下面我就重点详解分布式事务及原理实现@mikechen本文作者:陈睿|mikechen文章来源:mikechen.cc分布式事务分布式事务指的是...

大家平时天天说的分布式系统到底是什么东西?

目录从单块系统说起团队越来越大,业务越来越复杂分布式出现:庞大系统分而治之分布式系统所带来的技术问题一句话总结:什么是分布式系统设计和开发经验补充说明:中间件系统及大数据系统前言现在有很多Java技术...

取消回复欢迎 发表评论: