Redis 之父吐槽现代前端的复杂性:我们到底是在解决问题,还是在制造问题?

本文永久链接 – https://tonybai.com/2026/05/29/redis-creator-slams-modern-frontend-complexity

大家好,我是Tony Bai。

曾几何时,Web 开发是一件极其纯粹且美好的事情。

在那个遥远的上世纪 90 年代末,你只需要写几个简单的 .html 文件,撒上一点 .css,再用几行 JavaScript 操纵一下表单,就能构建出一个能被全世界访问的网站。源代码和你最终在浏览器里看到的东西,几乎是一模一样的。

但今天,一切都变了。

现代前端开发,已经演变成了一场极其荒谬、极度复杂的“军备竞赛”。

就在前不久,一篇名为《现代前端的复杂性:是本质必然还是历史偶然?》的文章,在Hacker News 上,引发了一场“行业公审”。

这篇文章毫不客气地将矛头直指以 React/Angular/Vue 为首的现代 SPA(单页应用)框架,痛斥其为了追求所谓的“开发体验(DX)”,把前端技术栈变成了一个由 TypeScript、TSX、JSX、Vite、Webpack、Tree Shaking、Polyfills、Post CSS 等无数个复杂工具链粘合起来的“巴别塔”。

这场大讨论,甚至引来了 Redis 之父、意大利传奇程序员 antirez(Salvatore Sanfilippo)的亲自下场。

他用极其犀利、充满历史洞见的“视角”,对现代前端的“异化”进行了吐槽和抨击,并抛出了一个值得我们所有人深思的灵魂拷问:

我们费尽心机建立的这套复杂体系,到底是在解决真正的商业问题,还是仅仅在制造更多的问题?

皇帝的新衣:被大厂“PUA”的前端开发者

antirez 在他那段获得最高赞的评论中,一针见血地指出了现代前端“原罪”的根源:大厂的内部组织架构,绑架了整个行业。

“大型框架(如 Angular 和 React)是被大公司推给用户群的。它们是‘大公司设计’的产物,后来才变成了行业常态。这就像让地球上每个网站都跑在 Kubernetes 上一样可笑。”

他认为,大厂有两个极端的需求:

  1. 彻底隔离前后端:因为他们的组织架构就是这么划分的。
  2. 将应用极度标准化:这样他们就可以轻松地招聘新人、开除旧人。

这两个目标,都与“构建一个优秀的 Web 应用”背道而驰。

为了满足这两个内部需求,前端被迫走上了一条“不归路”:

  • 我们抛弃了能与浏览器完美协作的语义化 HTML。
  • 我们开始用 JavaScript 去模拟一切,把本该由后端处理的路由、数据转换、状态管理,全部搬到了日益臃肿的客户端。
  • 我们创造了一代“不懂语言,只懂框架”的程序员。他们对 JavaScript 的底层原理一无所知,却能熟练地背诵 React 的生命周期。

antirez 毫不客气地总结道:

“讽刺的是,前端开发者自己深受其害。他们被迫不断地学习新的方式去实现同一个按钮、同一个分页。而且,如果他们足够聪明,他们会意识到,在大多数情况下,他们根本不知道‘编程’到底是什么。”

巴别塔的诅咒:为了一个按钮,引入整个宇宙

原帖作者更是详细地剖析了我们是如何一步步走进这个“巴别塔”的。

当你想用现代 SPA 框架写一个最简单的页面时,你需要经历怎样一条漫长而痛苦的“编译之旅”?

  1. 你的 TypeScript 代码,必须先被转译成 JavaScript,因为浏览器根本不认识 TS。
  2. 你的 TSX/JSX 文件,必须被转换成 React.createElement() 调用,因为浏览器也不认识 JSX。
  3. 成百上千个 .js 文件,必须被 打包(Bundle) 成一个或几个文件,否则会引发网络风暴。
  4. 打包的过程中,还需要做 Tree Shaking,把没用到的代码删掉。
  5. 打包完成后,还要做 Minification,把变量名缩短、把空格删掉。
  6. 你写的最新潮的 ESNext 语法,还需要被 Transpiler(如 Babel)降级成老掉牙的 ES5,因为你得兼容那些还在用旧版浏览器的用户。
  7. 你写的 Post CSS,也需要被处理,加上各种 -webkit-、-moz- 的浏览器前缀。

我们已经走得太远了。我们现在写的源代码,和最终在浏览器里运行的东西,已经完全是两个物种。

返璞归真?:HTMX 与“后端文艺复兴”

在这场对 SPA 框架的“集体围剿”中,一个名字被反复提及,它就是 HTMX

HTMX 并不是什么革命性的新技术,恰恰相反,它是一种“文艺复兴”。它的核心思想,简单到可以用一句话概括:让我们回到 1999 年,让后端直接返回 HTML!

在 HTMX 的世界里,没有前端路由,没有状态管理,没有虚拟 DOM。你只需要在 HTML 标签上,加上几个特殊的属性:

<!-- 点击这个按钮,HTMX 会自动向 /news 发起请求 -->
<!-- 然后用返回的 HTML 片段,替换掉 #news-container 的内容 -->
<button hx-get="/news" hx-target="#news-container">
  加载最新新闻
</button>

<div id="news-container"></div>

看懂了吗?

前端的复杂性,被几个简单的 HTML 属性彻底消灭了。你不再需要一个庞大的前端团队去维护一个复杂的 Node.js 工具链。你只需要几个懂 HTML 的后端工程师。

这对于那些被 React/Vue 的复杂性折磨得痛不欲生的后端开发者、独立开发者、甚至是前端老兵来说,无异于“天降福音”。

理性的声音:屁股决定脑袋

当然,Hacker News 从来不是一个一边倒的社区。在 HTMX 的“复古浪潮”之下,依然有大量理性的声音。

一位拥有 10 年经验的全栈开发者,分享了他的心路历程:

“作为一个与 JS/TS 相依为命的人,我无数次地想过,能不能用 Go、Ruby + HTMX 来简化这一切。但说实话,我至今没找到一个能比现有 SPA 栈哪怕好一点点的方案。”

“现代 Web 应用,本质上就是两个生活在不同环境(前端和后端)的应用。我接受这个现实。最终的结果,无论是在错误处理、用户体验、性能、还是可维护性上,都远比那个用 jQuery/HTMX 打补丁的服务器渲染栈更健壮。”

另外一位开发者的评论则更加扎心:

“你以为用了 HTMX 就没有复杂性了?你只是把复杂性从前端转移到了后端。而且,对于那些需要深度交互、复杂状态同步的应用(比如在线文档、画图工具),HTMX 那套简单的‘换 HTML’模式,很快就会捉襟见肘。”

小结:没有银弹,只有取舍

antirez 的下场,将这场关于“前端复杂度”的论战,推向了高潮。

他没有给出任何最终的答案,但他用他那穿越了数个技术周期的智慧,为我们指明了反思的方向:

  1. 警惕大厂的“最佳实践”:那往往只是为了解决他们自己内部组织架构问题的“特制药”,而不是普适的“银弹”。
  2. 重新审视“分离”的代价:前后端分离带来了职责的清晰,但也带来了巨大的通信成本和复杂性。在很多场景下,一个“全栈”的、由后端主导的简单架构,可能远比一个拆分的微服务架构更高效。
  3. 拥抱多样性:无论是 React 的组件化,还是 HTMX 的超媒体,它们都只是工具箱里的不同工具。一个成熟的架构师,应该懂得在项目的不同阶段、不同场景下,做出最合理的取舍,而不是陷入“非黑即白”的宗教战争。

或许,现代前端的复杂性,既是历史的偶然,也是需求的必然。

重要的是,在这场无休止的轮回中,我们是否还保留着像 antirez 那样,随时能跳出框架、审视全局的清醒与勇气。

资料链接:

  • https://binaryigor.com/modern-frontend-complexity.html
  • https://news.ycombinator.com/item?id=47824051

今日互动探讨:

你是否也曾被现代前端的复杂工具链(Webpack/Babel/TSX…)折磨得痛不欲生?对于 HTMX 这种“后端文艺复兴”的浪潮,你是拍手叫好,还是觉得它在“开历史的倒车”?

欢迎在评论区分享你的看法!


还在为“复制粘贴喂AI”而烦恼?我的新专栏 AI原生开发工作流实战 将带你:

  • 告别低效,重塑开发范式
  • 驾驭AI Agent(Claude Code),实现工作流自动化
  • 从“AI使用者”进化为规范驱动开发的“工作流指挥家”

扫描下方二维码,开启你的AI原生开发之旅。


原「Gopher部落」已重装升级为「Go & AI 精进营」知识星球,快来加入星球,开启你的技术跃迁之旅吧!

我们致力于打造一个高品质的 Go 语言深度学习AI 应用探索 平台。在这里,你将获得:

  • 体系化 Go 核心进阶内容: 深入「Go原理课」、「Go进阶课」、「Go避坑课」等独家深度专栏,夯实你的 Go 内功。
  • 前沿 Go+AI 实战赋能: 紧跟时代步伐,学习「Go+AI应用实战」、「Agent开发实战课」、「Agentic软件工程课」、「Claude Code开发工作流实战课」、「OpenClaw实战分享」等,掌握 AI 时代新技能。
  • 星主 Tony Bai 亲自答疑: 遇到难题?星主第一时间为你深度解析,扫清学习障碍。
  • 高活跃 Gopher 交流圈: 与众多优秀 Gopher 分享心得、讨论技术,碰撞思想火花。
  • 独家资源与内容首发: 技术文章、课程更新、精选资源,第一时间触达。

衷心希望「Go & AI 精进营」能成为你学习、进步、交流的港湾。让我们在此相聚,享受技术精进的快乐!欢迎你的加入!

img{512x368}


商务合作方式:撰稿、出书、培训、在线课程、合伙创业、咨询、广告合作。如有需求,请扫描下方公众号二维码,与我私信联系。

无痛消灭技术债:Google I/O 2026 开启 Go 自动重构时代

本文永久链接 – https://tonybai.com/2026/05/29/google-io-2026-automated-go-refactoring-eliminating-technical-debt

大家好,我是Tony Bai。

在软件开发的世界里,一直存在着一个令人绝望的“二选一”魔咒。

你要么选择 Python 或 JavaScript:它们写起来如丝般顺滑,能让你在周五下午迅速完成一个功能;但当业务量爆炸、公司准备上市时,那些深埋在代码里的性能瓶颈和类型错误,会让你在无数个深夜里怀疑人生。

你要么选择 C++ 或 Java:它们像装甲车一样坚固,能承载千万级的高并发;但代价是,你需要忍受极其繁琐的语法、漫长的编译时间,以及让新手望而生畏的学习曲线。

难道我们就不能“全都要”吗?

这正是近 20 年前,Google 的三位传奇大佬——Robert Griesemer、Rob Pike 和图灵奖得主 Ken Thompson 在白板前思考的问题。于是,Go 语言诞生了


Go 的核心哲学:打破“开发效率”与“生产可用性”的二选一魔咒

在刚刚结束的 Google I/O 2026 大会上,Go 语言产品负责人 Cameron 和开发者关系负责人 Mark,向全球开发者交出了一份震撼的答卷。

他们宣布,在全新的 Go 1.25 和 1.26 版本中,Go 不仅在底层性能上实现了高达 50% 的跨越式提升,更重要的是,Go 正在利用 AI 和强大的重构工具,彻底终结“代码老化”和“技术债”的噩梦。

今天,我们就来深度拆解这场发布会,看看这门被无数大厂誉为“云原生第一语言”的利器,是如何在 AI 时代完成自我进化的。

AI 时代的编程语言:为什么“无聊(Boring)”反而成了最大的优势?

在很多人眼里,Go 是一门极其“无聊”的语言。

它没有花里胡哨的语法糖,极少引入新的语言特性,甚至你今天写的 Go 1.26 代码,看起来和十几年前的 Go 1.0 代码几乎一模一样。

但这恰恰是 Go 在 AI 时代最可怕的护城河。

“机器可读性,决定了 AI 代码生成的上限。” Mark 在演讲中一语道破天机。

当今时代,越来越多的代码是由 AI 生成的。大语言模型(LLM)最喜欢什么样的语言?

  • 语法简单、确定性强:这意味着 AI 不容易产生“幻觉”。
  • 标准化的格式(gofmt):这意味着 AI 生成的代码不需要人类再去调整排版。
  • 强类型系统:这意味着 AI 生成的代码可以在编译期就得到验证。

Go 语言的这些“无聊”特质,使得它成为了 AI 编写、阅读和编辑的完美对象。但这还不够。随着项目的发展,API 会被弃用,旧的代码模式会过时。如何保证海量的(包括 AI 生成的)历史代码,不沦为难以维护的“屎山”?

杀手锏:gofix 与现代转换器(Modernizers)

在 Go 1.26 中,官方重写了 gofix 引擎,推出了一项堪称“代码保洁员”的神级功能——连续现代化(Continuous Modernization)

依托 Go 强大的静态分析框架,gofix 现在包含了 20 多个预置的“现代转换器(Modernizers)”。它能做什么?

假设你的项目里还在使用老的代码模式,或者某个旧的辅助函数(比如 proto.String)现在可以直接用语言内置的 new() 函数来替代。你只需运行 gofix,它就会在确保语义完全等价、不破坏原始行为的前提下,将你整个代码库中的陈旧代码,一键升级为最现代、最地道的 Go 代码!

甚至,作为库的开发者,你可以在弃用的 API 上加上一句简单的指令://go:fix inline。

当调用者运行 gofix 时,系统会自动将他们代码中所有调用该废弃 API 的地方,直接内联替换为最新的实现。

在 Google 内部,这个工具已经自动提交了超过 18,000 个代码变更。 它硬生生地将一个最古老的 Go 代码库,毫无痛感地升级到了最新的语言特性。

在其他生态里,代码会随着时间流逝而腐烂;而在 Go 里,有了 gofix 和向后兼容的承诺,旧代码不仅不会成为负债,反而是一笔随时可以自动升级的资产。

征服并发测试:告别 time.Sleep 带来的玄学 Bug

如果你写过高并发的程序,你一定被并发测试折磨过。

Goroutine 的调度是无序的。为了测试并发代码,开发者往往被迫在测试里写满丑陋的 time.Sleep(2 * time.Second),或者设置各种超时机制。这不仅让测试运行极其缓慢,还会导致 CI/CD 流水线中出现大量随机失败的玄学 Bug(Flaky Tests)。

在 Go 1.25 中,官方祭出了终结并发测试噩梦的大杀器:testing/synctest 库正式 GA。

这是一个天才般的设计。synctest 引入了一个名为“气泡(Bubble)”的概念:

它在测试中创建了一个完全隔离的运行环境。在这个气泡里,所有的 Goroutine 都在使用一个“合成的假时钟(Synthetic Clock)”

当气泡内的所有 Goroutine 都因为等待 I/O 或休眠而被阻塞时,气泡的时钟会自动且瞬间向前快进!

过去一个需要死等 5 秒钟才能触发超时的并发测试,现在使用 synctest,可以在几毫秒内确定性地跑完!这不仅将测试速度提升了千百倍,更重要的是,它让多线程的交织执行变得绝对确定且可控。这是给所有硬核后端开发者的巨大福音。

零代码修改,性能飙升 50%:绿茶垃圾回收器(Green Tea GC)

如果说前面的工具是为了提升开发效率(Productivity),那么接下来的底层架构升级,则是为了捍卫 Go 在云计算领域的绝对统治力(Production Readiness)。

在云原生时代,Docker、Kubernetes、Terraform 全都是用 Go 写的。Go 必须榨干每一滴硬件性能。

在 Go 1.25 实验性引入、并在 1.26 默认启用的 Green Tea(绿茶)垃圾回收器,是一次系统级的底层重构。

传统的 GC 算法是将内存视为一个个零散的对象进行扫描和回收,这种设计在现代多核 CPU 面前显得极其低效。而 Green Tea GC 则完全顺应了现代硬件的设计哲学:

  1. 按页(Pages)处理:它将工作的基本单元从单个对象,转变为大块连续的内存页。
  2. 向量化加速:它允许运行时极其高效地利用现代 CPU 的高吞吐量向量加速指令(SIMD)。
  3. 缓存友好:大幅减少了高延迟的内存提取。

最恐怖的是它的收益:在不修改你任何一行业务代码的前提下,升级到 Go 1.26 后,大多数应用的 GC CPU 开销直接下降了 10%;而对于那些内存布局极其复杂的重型应用,CPU 消耗甚至能暴跌 50%!

此外,Go 1.26 还在运行时做出了多项优化:

  • 更多的栈分配:通过更智能的逃逸分析,将大量原本需要在堆(Heap)上分配的内存,直接转移到栈(Stack)上。栈分配不仅速度快,而且对 GC 零负担,缓存局部性极佳。
  • CGo 调用提速 30%:极大地降低了跨界调用的成本,这使得 Go 语言能够更轻松地切入对底层硬件库依赖极强的机器学习(ML)、游戏引擎和 GUI 领域。

这就是 Go 对兼容性承诺的最美诠释:你只需要升级版本并重新编译,你的系统就自动变得更强了。

拥抱 AI:MCP 官方 SDK 与未来的开发生态

在大模型全面爆发的今天,让 AI 能够理解并操作系统,成为了关键的技术壁垒。

去年,Go 官方悄然发布了 Model Context Protocol (MCP)官方 SDK

MCP 是什么?它是一个让你的服务能够标准化地为 LLMs(大语言模型)提供上下文和工具调用的协议。

借助这个 SDK,你可以极其可靠地利用 Go 的并发和网络能力,将你的企业数据、内部 API 甚至本地文件系统,安全地暴露给 AI 智能体。

不仅如此,Google 自己也在“吃狗粮”。他们正在利用这个 MCP SDK,构建能够向 AI 开发工具暴露更多 Go 工具链(Toolchain)能力的服务器。比如,在官方的语言服务器 gopls 中,已经内置了一个实验性的 MCP server。

这意味着,在未来,像 Cursor 这样的 AI 编程助手,将能够通过 MCP 协议,直接读取你的项目依赖、调用 gofix 重构代码、甚至运行特定的并发测试,从而实现真正意义上的“AI 自动化工程”。

小结:为什么 20 年后,Go 依然是开发者的首选?

近 20 年过去了,软件开发的世界经历了从单体架构到微服务,从云原生到 AI 智能体的天翻地覆。许多曾经风光无限的语言渐渐老去,但 Go 却显得愈发年轻和强壮。

这场发布会揭示了 Go 长盛不衰的核心密码:它从来不仅仅是一门语言,它是一个端到端的软件工程平台。

当其他语言在追求花哨的语法糖时,Go 在默默地优化 gofmt 和 gofix,确保几百人协作时代码风格绝对一致;

当其他语言在纠结垃圾回收停顿时,Go 推出了 Green Tea GC,默默帮你省下千万级的服务器账单;

当 AI 时代来临时,Go 以其极简的机器可读性和强大的 MCP 协议支持,成为了 AI 智能体最坚实的后端基座。

如果你想在今天构建一个能在 10 年后依然易于维护、性能强劲、且对 AI 极度友好的系统。

答案很无聊,但很明确:选择 Go。

资料链接:https://www.youtube.com/watch?v=l4lneZYtjQg


今日开放讨论:

你的项目中,存在因为“代码老化”而不敢轻易重构的历史遗留模块吗?Go 1.26 引入的 gofix inline 自动化升级思路,是否能为你的团队带来启发?

欢迎在评论区分享你的技术债血泪史,我们一起探讨 AI 时代的重构之道!


还在为写 Agent 框架频频死循环、上下文爆炸而束手无策?我的新专栏 从0 开始构建 Agent Harness 将带你:

  • 抛弃臃肿框架,回归“驾驭工程 (Harness Engineering)”的第一性原理
  • 用 Go 语言手写 ReAct 循环、并发拦截与上下文压缩引擎等,复刻极简OpenClaw
  • 构建坚不可摧的 Safety Middleware 与飞书人工审批防线
  • 在底层实现 Token 成本审计、链路追踪与自动化跑分评估
  • 从“调包侠”进化为掌控大模型边界的“AI 操作系统架构师”

扫描下方二维码,开启从 0 开始构建Agent Harness 的实战之旅。


原「Gopher部落」已重装升级为「Go & AI 精进营」知识星球,快来加入星球,开启你的技术跃迁之旅吧!

我们致力于打造一个高品质的 Go 语言深度学习AI 应用探索 平台。在这里,你将获得:

  • 体系化 Go 核心进阶内容: 深入「Go原理课」、「Go进阶课」、「Go避坑课」等独家深度专栏,夯实你的 Go 内功。
  • 前沿 Go+AI 实战赋能: 紧跟时代步伐,学习「Go+AI应用实战」、「Agent开发实战课」、「Agentic软件工程课」、「Claude Code开发工作流实战课」、「OpenClaw实战分享」等,掌握 AI 时代新技能。
  • 星主 Tony Bai 亲自答疑: 遇到难题?星主第一时间为你深度解析,扫清学习障碍。
  • 高活跃 Gopher 交流圈: 与众多优秀 Gopher 分享心得、讨论技术,碰撞思想火花。
  • 独家资源与内容首发: 技术文章、课程更新、精选资源,第一时间触达。

衷心希望「Go & AI 精进营」能成为你学习、进步、交流的港湾。让我们在此相聚,享受技术精进的快乐!欢迎你的加入!

img{512x368}


商务合作方式:撰稿、出书、培训、在线课程、合伙创业、咨询、广告合作。如有需求,请扫描下方公众号二维码,与我私信联系。

如发现本站页面被黑,比如:挂载广告、挖矿等恶意代码,请朋友们及时联系我。十分感谢! Go语言第一课 Go语言进阶课 AI原生开发工作流实战 从 0 开始构建 Agent Harness Go语言精进之路1 Go语言精进之路2 Go语言第一课 Go语言编程指南
商务合作请联系bigwhite.cn AT aliyun.com
这里是 Tony Bai的个人Blog,欢迎访问、订阅和留言! 订阅Feed请点击上面图片

如果您觉得这里的文章对您有帮助,请扫描上方二维码进行捐赠 ,加油后的Tony Bai将会为您呈现更多精彩的文章,谢谢!

如果您希望通过微信捐赠,请用微信客户端扫描下方赞赏码:

如果您希望通过比特币或以太币捐赠,可以扫描下方二维码:

比特币:

以太币:

如果您喜欢通过微信浏览本站内容,可以扫描下方二维码,订阅本站官方微信订阅号“iamtonybai”;点击二维码,可直达本人官方微博主页^_^:
本站Powered by Digital Ocean VPS。
选择Digital Ocean VPS主机,即可获得10美元现金充值,可 免费使用两个月哟! 著名主机提供商Linode 10$优惠码:linode10,在 这里注册即可免费获 得。阿里云推荐码: 1WFZ0V立享9折!


View Tony Bai's profile on LinkedIn
DigitalOcean Referral Badge

文章

评论

  • 正在加载...

分类

标签

归档



View My Stats