“干净”的代码,糟糕的性能 - Muratori


这篇文章论证使用鲍勃大叔的Clean干净代码原则编程,速度差异20- 25倍! 详细点击标题

如果您查看一个“干净”的代号摘要,并提出取出现实影响代号结构的规则,您会得到:

  • 偏好的多态性而不是“if/else”和“switch”
  • 代码不应该知道它所处理的对象的内部结构
  • 函数应该很小
  • 函数应做一件事
  • “dry”-不要重复自己

如今的软件速度非常慢。与现代硬件实际执行我们需要软件执行的操作的速度相比,它的性能非常非常差。

“为什么软件这么慢”的答案在很大程度上是“因为‘干净’的代码”。“干净”代码方法论背后的想法对性能几乎都是可怕的,你不应该这样做。

当你这样做时,你的代码会慢 15 倍或更多。

banq评:该文使用的案例属于一种算法问题,解决的问题是:矩形 三角形 求面积之和,这是一种纯数学的算法题,不是普通复杂的业务领域,在这种简单的算法问题下,使用将操作和数据融合在一起的数据表驱动方法性能比较快。

那么有无优化方法?对于这种组装一个对象需要反复访问数据表的方法就是使用缓存或延迟加载等策略,尽量在内存中做迭代、反反复复的重复过程,代价很便宜。

该文认为:
如果您的代码库是围绕其函数构建的,那么简单的事情(例如将值提取到表中和使用 switch 语句)很simple容易实现。相反,如果它是围绕它的类型构建的,那就要困难得多——如果不进行大量重写,甚至可能是不可能的。

为这个形状增加了一个属性, 10 倍的速度差异变成了 15 倍的速度差异,这就像将 2023 年的硬件推回到 2008 年!而我们只是通过在问题定义中添加一个新参数就消除了这种速度差异。

banq注:性能主要浪费的组装对象上,因为编程语言本身是一直琐碎的语言,因此,为了描述业务对象,需要很多琐碎的语言片段组成,这只是说明现在编程语言的落后性,作为解决方案的编程语言与解决的问题复杂性之间差距大概靠ChatGPT这样的AI来帮助弥补了。

其实汇编语言最快,因为那是计算机硬件本身讲的语言,但是人类很难方便地解决复杂业务问题,大概只能解决平面几何等学校学堂上的数学或算法问题。