“整洁代码”竟让性能暴跌1.5倍

"Clean" Code, Horrible Performance (2023)

“整洁代码”竟让性能暴跌1.5倍

我们常被告知要写“整洁代码”,遵循多态、小函数和DRY原则。但通过实测对比,我发现这些规则可能带来巨大的性能代价。在计算图形面积的例子中,严格遵循“整洁代码”的多态实现,比使用简单的switch语句和扁平化结构慢了1.5倍。这意味着,盲目追求代码的“整洁”可能让你失去相当于三年硬件进化的性能优势。当编译器无法窥探虚拟函数调用的内部时,优化无从谈起。有时候,打破规则、让代码更“脏”一点,反而能换来极致的运行效率。

仅仅因为有人告诉你用多态代替switch语句,就抹去了三年硬件进化的成果。
  1. Aurornis

    没错,一个玩具问题只需要简单的实现。这完全是个稻草人谬误。我甚至不太喜欢 Robert Martin 的《整洁代码》,但作者并没有触及这种风格真正能带来好处的地方。当你因为要支持某个新的业务流程而不得不更新 23 个 if 语句时,你就会希望有一个概念性的实体来封装针对这类流程的操作,这样你只需要在一个地方实现它们。

  2. taybin

    我认为《整洁代码》属于那一类书籍/风格:对需要一些结构指导的初级开发者很有帮助,但对将其奉为教条的资深开发者却有害。

    在漫长的职业生涯中,你迟早会遇到一个《整洁代码》狂热分子,他们带着一种优越感,不去审查代码的实际逻辑,反而对诸如“函数行数超过某个随意设定的数字”之类的细节吹毛求疵。这正是大多数人开始讨厌《整洁代码》的转折点。

  3. jayd16

    好的,现在加一个 Path 形状,需要计算任意复杂度的多边形面积。

    想想看,现在的工作负载将由实际计算面积的核心任务主导,从而降低了结构体使用带来的影响。

    再想想实现这个改动所需的 diff。

    虽然《整洁代码》不应被奉为圣经,但这个微基准测试并不是 CC 试图解决的问题的一个现实案例。

  4. aw1621107

    相关讨论:

    2023-02-28 发布的原文 HN 帖子(https://news.ycombinator.com/item?id=34966137),739 分,914 条评论

    Casey(本文作者)与 Uncle Bob(《整洁代码》作者,Casey 正在批评其编程模式)之间的讨论,发布于 2023-03-11 的 HN(https://news.ycombinator.com/item?id=35105528),223 分,213 条评论

    "Horrible Code, Clean Performance",一篇致敬 Casey 原文的文章,发布于 2023-04-19 的 HN(https://news.ycombinator.com/item?id=35596069),121 分,114 条评论

  5. jeffnash

    在这些示例中,性能差异有多少是源于语言或编译器的选择?

    如果在 Go、Rust 或 Java 中避免或使用某些模式,我会看到类似的性能提升或损失吗?这些例子和 C++ 中的一样吗?

    那像 Ruby、Python 或 JavaScript 这样的动态语言呢?

同日更多故事

2026-08-04