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

前端,后端——让我们再次成为朋友吧

前端,后端——让我们再次成为朋友吧

编程是我的热情所在。没有什么比与团队合作,共同为用户交付可用的产品更棒的了。

共同努力能建立这种联系。它能建立起让我们彼此信任的纽带。

安杰伊,你在说什么?又是老一辈人说的那些话吗?

是的。

那时候,也就是不久之前,我们还没有前端/后端分离的概念。

我们已在服务器端渲染了HTML代码,并将其作为一个完整的页面发送到浏览器。

是的,它有局限性,就像当时的浏览器和机器一样。

浏览器性能提升了,电脑和手机性能也更强了,现在它们能够运行更多种类的JavaScript代码。

大约在2010年,这种转变开始出现。随着时间的推移,越来越多的应用程序采用JSON后端和单页应用程序(SPA)前端。我曾是这种方法的倡导者之一。它是一种全新的技术,有望实现更高的模块化。

它几乎让我们把单页应用程序看作是桌面应用程序。

几乎。

浏览器就像一个奇怪的混合体。

浏览器一方面是一个文档浏览器。阅读这篇文章,点击下一篇,阅读这份文档列表,点击,阅读另一篇文章。

浏览器的第二个方面是作为运行 JavaScript 应用程序的运行时环境。

我当时误以为浏览器会变得越来越不混合,而更多地成为运行时部分。

这样一来,某些事情就可以简化了。

在运行时应用中设置“后退”按钮意义不大。对于一个运行在浏览器中的国际象棋应用来说,它又有什么意义呢?这让人困惑。没错,桌面应用通常会有撤销/重做功能。但在这里,它并不适用。如果我们把浏览器看作文档查看器,那么“后退”按钮就非常有意义了。返回上一页。但在桌面应用中,它却让人非常困惑。

这就是为什么点击“返回”按钮时,前端应用程序的这部分行为会很奇怪的原因。

然后是URL——它们在文档查看器中非常适用。文档是资源。资源有地址,就像URL一样。

但是,如何在行为类似于桌面应用程序的 JS 前端中维护有意义的 URL 状态呢?每条消息都应该有自己的 URL 吗?此外,像国际象棋这样的游戏和其他更高级的功能又该如何处理呢?

别误会我的意思——所有问题都可以解决,而且都能保持一致。你可能已经这么做了。

这只会增加工作量,增加复杂性。

我希望浏览器不再仅仅是文档查看器。

相反,我们将把它当作运行文档查看器应用程序的运行时环境。这有所不同。

要么是我错了,要么是我期望太高了。我无法想象未来几十年我们如何才能拥有混合型浏览器。

我希望一切从简。

但这和前端、后端有什么关系呢?

前端变得更加复杂(类似于桌面应用程序)。

新技术层出不穷——React、Redux,以及前端状态管理。这逐渐发展成为一个独立的专业领域。

再加上市场上大量新开发者的涌入,造成了这种近乎代际的差异。许多
年轻人专注于前端开发,而像我这样的老一代开发者则更倾向于后端开发。

一开始还好。但随着时间的推移,那些更偏向后端开发的开发者逐渐跟不上前端的发展。前端工具很复杂,现在依然如此。要同时成为一名优秀的后端开发者和前端开发者非常困难。
人们都不愿平庸,所以他们会选择站在哪一边。

我们就是从这里开始不再是朋友的。

现在我们在应用程序之间设置了这道屏障。

前端开发人员会问:“这个 API 什么时候才能准备就绪?”
他们提出了像 GraphQL 这样的方案,以便减少与后端开发人员的沟通。

“都是你的错,我的 API 没问题,但你把 JS 部分搞砸了,现在用户没法用这个应用了!”后端开发人员对前端开发人员大喊。

我们自己人为地划清了界限。

这是我们和他们之间的对抗。

我们不是朋友。

更糟糕的是,我们离成为敌人只有一步之遥。

虽然不是所有地方都这样,也不总是这样——但这是我看到的趋势。

我不喜欢那样。

还有希望吗?

是的。但我可能又错了 ;)

希望是未来有可能重新转向后端开发。

HTML渲染位置发生了变化。React引入了服务器端渲染组件(Server Rendered Components,SCR),这听起来和以前的技术没什么两样。只不过这次是用JavaScript实现的。

然后,Rails 世界以其创新的方式脱颖而出。如果我们认同前端仍然与我们息息相关,并且乐于接受 JavaScript 的“点缀”,那么 HTML 将在后端渲染,并通过 WebSocket 发送给客户端(这样其他客户端也能获得良好的更新体验)。

这种方法只需要在后端维护状态。

大大简化了前端代码。

这大大简化了整个应用程序。潜在的bug更少,功能发布速度更快。

值得关注的两个地方是Hotwire(即将并入 Rails)和Stimulus Reflex。你的技术中很可能也有类似的技术。

这是我们共同的愿望,亲爱的后端和前端朋友们。

这意味着更简化的技术栈。这意味着后端开发人员可以交付一些前端功能。这意味着前端开发人员可以有更多时间学习后端知识。

这意味着我们将再次合作。

我们又和好了。

文章来源:https://dev.to/andrzejkrzywda/frontend-backend-let-s-be-friends-again-28