【问题标题】:Which method is faster when doing a "smaller than or equal to" comparison? [duplicate]进行“小于或等于”比较时,哪种方法更快? [复制]
【发布时间】:2021-08-12 23:52:40
【问题描述】:

a <= b 是否比 a < b + 1 更快(或性能更好)?

如果你们需要一种语言来回答我的问题,那么我会抛出 javascript,因为我最常使用它。

【问题讨论】:

  • 有很多在线工具可以让你比较两段代码的性能。例如:jsben.ch。虽然如果您遇到性能问题,几乎可以肯定不是因为您使用了哪个比较运算符。而是寻找更大的性能问题,不要担心这样的事情。
  • 这能回答你的问题吗? Is < faster than <=?
  • 首先,它在做一些不同的事情(除非b被保证是一个足够小的整数)。

标签: javascript performance compare


【解决方案1】:

TL;DR:a &lt;= b 更快...


首先,让我们记住,任何编程语言中的所有代码操作都会在某个时间点(无论是在运行时还是编译时)被提炼成它们的机器代码等价物,以便实际执行,因为处理器(例如 CPU)只理解机器代码,而不是 C#、JavaScript 或 Go。

考虑到这一点,我们可以将这两个表达式分解为更接近其基本部分的内容:

  • a &lt;= b 完全是一个操作,不能再细分了
  • a &lt; b + 1 比一个操作更多,它(不复习计算机体系结构)大致分为:
    • 计算b + 1
    • b + 1 的答案存储在缓存中(我们称之为c
    • 从缓存中读取c
    • 然后计算a &lt; c

鉴于this answer,这表明&lt;&lt;= 在速度/效率方面是相等的(因为它们都是处理器级别的“跳转”型指令),我们可以说a &lt;= b 绝对a &lt; b + 1快,只是因为前者只是一个单一的操作,而后者不止一个。

换句话说,如果比较操作需要x时间,而加法/存储/读取一起需要y时间,那么我们肯定知道x + y 时间大于 x 时间,因为我们知道 xy 都是非零的(没有操作需要 时间)。

...但你不应该真正关心


永远不要忘记,premature optimization is the root of all evil。您应该关心这一级别的优化,因为它几乎可以保证无关紧要。 CPU 速度很快。您的时间和劳力最好花在更明显更密集和更耗时的操作上,而且只有在您注意到它比您想要或需要的速度慢时才会这样做。


如果您愿意,这里有一个实际的基准:https://jsben.ch/KVrug。它在多次运行中返回不一致的结果,这有助于说明为什么这对于实际使用并不重要。像往常一样,这个级别的优化可能会发挥作用,但总的来说,这并不重要。

【讨论】:

    猜你喜欢
    • 2014-04-19
    • 2013-08-30
    • 2016-06-22
    • 1970-01-01
    • 1970-01-01
    • 2017-06-27
    • 2014-07-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多