gpt4 book ai didi

javascript - JavaScript 中 boolean 值与 Int 值的比较

转载 作者:行者123 更新时间:2023-12-01 23:55:34 25 4
gpt4 key购买 nike

我一直认为 boolean 值在存储开/关值方面比整数更有效 - 考虑到这就是它们存在的原因。我最近决定在 jsperf 的帮助下检查这是否属实,它得出了一些相反的结果!

http://jsperf.com/bool-vs-int

这是我尝试的第一个测试。切换开/关开关的值。在 Chrome 上,使用 1/0 执行此操作要快得多,但在 Firefox 上,使用 bool 执行此操作要稍快一些。有趣。

http://jsperf.com/bool-vs-int-2

这是我尝试的第二个测试。在条件中使用它们。与 boolean 值相比,这对于整数来说似乎具有显着的优势,在 Firefox 和 chrome 上使用 1/0 代替 boolean 值的速度提高了 70%。搞什么?

我想我的问题是,我做错了什么吗?为什么整数在 boolean 运算方面表现得如此出色?使用 bools 清晰度的唯一值(value)是,还是我遗漏了一些重要的东西?

最佳答案

免责声明,我只能代表 Firefox,但我猜 Chrome 也类似。

第一个示例(http://jsperf.com/bool-vs-int):

  1. Not 运算JägerMonkey(Spidmonkey 的 JavaScript methodjit)首先内联 boolean 值检查,然后只内联异或,这非常快(我们不知道 a/b 的类型,因此我们需要检查类型)。第二次检查是针对 int 的,因此如果 a/b 是 int ,则速度会慢一些。 Code

  2. 减法运算。我们再次不知道 c/d 的类型。再次,你很幸运,我们将首先假设整数并内联。但因为在 JavaScript 中数字运算被指定为 IEEE 754 double ,所以我们需要检查是否溢出。因此,唯一的区别是情况 1 中溢出时的“sub”和“条件跳转”与普通异或。 Code

第二个例子:(我对这些不是 100% 确定,因为我以前从未真正看过这段代码)

  1. 和 3.如果。我们内联对 boolean 值的检查,所有其他情况最终都会调用将值转换为 boolean 值的函数。 Code

  2. 比较和如果。从实现的 Angular 来看,这是一个非常复杂的情况,因为优化相等操作非常重要。所以我认为我找到了正确的代码,这似乎建议我们首先检查 double ,然后检查整数。因为我们知道比较的结果始终是 boolean 值,所以我们可以优化 if 语句。 Code

后续我转储了生成的机器代码,所以如果您仍然感兴趣,here you go .

总的来说,这只是更大的图景中的一小部分。如果我们知道变量的类型并且知道减法不会溢出,那么我们可以使所有这些情况都同样快。这些努力正在通过 IonMonkey 进行。或 v8 的曲轴。这意味着您应该避免基于此信息进行优化,因为:

  1. 已经相当快了
  2. 引擎开发人员负责为您优化
  3. 将来会更快。

关于javascript - JavaScript 中 boolean 值与 Int 值的比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7221963/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com