发布于 2026-01-06 2 阅读
0

Web apps are too complex. This is how we can simplify them.

Web应用程序过于复杂。以下是简化它们的方法。

我相信我们可以更好地管理应用程序的复杂性。

我们当中很少有人意识到我们的决定会造成多少次级影响。

让我们看看随着时间的推移,复杂性是如何增长的。

静态时代

那时候很简单。我们只有 MySQL 数据库、业务逻辑和 HTML + CSS 视图。

所有内容都是静态的,浏览器的任务是显示内容、导航和提交表单。

简单的Web应用程序架构图

我喜欢把测试工作量作为衡量代码简洁性的基准。代码共有三层。

业务逻辑层和持久层可以轻松集成,视图层可以在浏览器中进行测试。

维护这样的系统可能需要测试人员、开发人员和设计师。当然,由一个人负责所有这些工作也是可行的。

AJAX时代

JavaScript 的出现为用户体验的提升打开了新的大门。在 WordPress 网站上添加动态菜单、表单或日历,曾经是最酷炫的功能之一。

带有 JavaScript 架构图的 Web 应用程序

客户端的复杂度出现了激增。

许多浏览器的 JS 实现方式各不相同,这就催生了 jQuery 的出现。

这赋予了设计师很大的权力,并将更多的工程工作转移到了前端。JavaScript 使浏览器具有了可扩展性。

测试复杂度增加了吗?是的。每一段新的 JavaScript 代码都只能在浏览器中进行测试。

这需要团队具备测试、后端编程、JavaScript 和设计方面的专业知识。频繁切换服务器端和客户端语言令人沮丧。当时流行让不同的人分别负责服务器端和客户端的开发。

单页时代

还记得Angular.js应用程序的第一个示例吗?那个会自动更新div内容的输入框?美好的回忆。

欢迎来到单页应用时代,在这个时代,前端开发比后端开发更加复杂——这主要是因为相关的逻辑被转移到了客户端。结果,前端和后端之间的鸿沟越来越大,JavaScript 疲劳也随之而来。

单页应用程序架构图

我们最终得到了两个紧密耦合的应用程序。

要维持这种状态,您至少需要一位在测试、后端、前端开发(丰富的框架、工具和浏览器知识)和设计方面经验丰富的人员。

现在需要维护两个应用程序,代码量也比以往任何时候都多。你必须在前端和后端都维护单元测试、集成测试和端到端测试。出于安全考虑,业务逻辑现在无法直接访问。
前端和后端现在都需要维护负责通信的层。

客户端代码需要大量的 API 模拟来测试底层性能——DOM 测试非常消耗资源。

编排变得困难,因为必须确保部署同步。如果后端和前端团队是分开的,那就更难了。

别忘了浏览器测试,它与客户端集成测试也有很多重叠之处。此外,还需要考虑复杂性和权衡取舍等因素。

这导致代码量增加,进而再次增加了代码的复杂性。

SEO 变得棘手,但值得庆幸的是,生态系统通过服务器端渲染水合作用解决了这个问题

一些优秀的模式也已涌现。用户体验变得更好、更具创意。我们终于能够以可管理且可扩展的方式定义客户端逻辑。

我们现在都知道,我们想要的是成分,避免过多的副作用,以及无法控制的状态突变。

React 事实上已经成为一种标准。

简约复兴

解决复杂性的办法是接受耦合性,并使开发者体验统一。

在旧框架中通过创新实现简化。

Ruby on Rails 和 Laravel 都是相关的技术。

考虑一下他们。他们的成熟度会让你行动迅速。

他们最近在许多方面进行了创新,这很有趣。

不妨看看Laravel 的组件或者 RoR 的Hotwire

下一代 JavaScript 框架

想要继续留在 JavaScript 领域的人应该考虑以下几点。

Next.js开创了一个很好的趋势,它将 React 和服务器逻辑放在一起。

Blitz.js基于 Next,是 Ruby on Rails 的一个优秀替代方案。它提供了恰到好处的抽象,让你能够将应用视为一个统一的整体。使用它有时感觉就像作弊一样——当然,这是褒义的。它启发我去探讨我们生态系统中存在的复杂性问题。

以全新的视角重新审视问题领域,并引入许多优秀且已被遗忘的模式。

React 的服务器组件让一切变得更好。

最近,React 团队提出了一个新想法,可以让我们以组件驱动的世界变得更好。

建议阅读文章并观看他们的演示

当它们发布时,我们将达到最佳情况,即 Web 应用程序仅在
需要的地方是动态的,而无需在服务器端和客户端范式之间切换。

以上所有框架都将从中受益。

综上所述

我们应该开始扪心自问,我们是否还想继续沿用目前这种标准做法。

建议的框架降低了复杂性,使我们能够体验到旧方法的简洁性,同时又能享受到现代方法的优势。

他们欣然接受后端和前端紧密耦合的事实,并使开发人员体验统一起来。

这是一个减少代码编写、减少测试时间、简化编排、减少维护复杂性所需人力投入,并将更多精力投入到我们正在努力创造的产品中的机会。

文章来源:https://dev.to/pietmichal/web-apps-are-too-complex-this-is-how-we-can-simplify-them-3ala