Thr*_*art 18 javascript int performance boolean
我总是认为布尔值比存储开/关值时更有效 - 考虑到它们存在的原因.我最近决定在jsperf的帮助下检查这是否属实,并且它得出了一些相反的结果!
这是我试过的第一个测试.切换开/关开关的值.在Chrome上使用1/0这样做速度明显更快,但在Firefox上使用bool执行此操作要快一些.有趣.
http://jsperf.com/bool-vs-int-2
这是我试过的第二次测试.在条件中使用它们.与bools相比,这似乎具有明显的优势,使用1/0而不是布尔 - 在firefox和chrome上都快了70%.跆拳道?
我想我的问题是,我做错了吗?为什么在布尔的工作中注册更好?是使用bool清晰度的唯一价值,还是我错过了一些重要的东西?
evi*_*pie 17
免责声明,我只能代表Firefox,但我猜Chrome与此类似.
第一个例子(http://jsperf.com/bool-vs-int):
Not操作 JägerMonkey(Spidmonkey的JavaScript methodjit)首先检查布尔值的检查,然后只检查xors,这非常快(我们不知道a/b的类型,所以我们需要检查类型).第二个检查是针对int的,所以如果a/b是一个int,这会慢一点. 码
减法操作. 我们再次不知道c/d的类型.再次,你很幸运我们将首先采用整数和内联.但是因为在JavaScript编号操作中指定为IEEE 754双倍,我们需要检查溢出.所以,唯一不同的是"分",并在情况1."条件跳转"溢出相对于单纯的XOR 码
第二个例子:(我不是100%肯定这些,因为我之前从未真正看过这段代码)
和3. 如果.我们内联检查布尔值,所有其他情况最终调用一个函数将值转换为布尔值. 码
比较和如果.从实现的角度来看,这是一个非常复杂的案例,因为优化平等操作非常重要.所以我认为我找到了正确的代码,似乎建议我们首先检查double,然后检查整数.因为我们知道比较的结果总是布尔值,所以我们可以优化if语句.
码
后续我转储了生成的机器代码,所以如果您仍然感兴趣,请转到此处.
总的来说,这只是一张更大的图片.如果我们知道变量有什么类型,并且知道减法不会溢出,那么我们可以使所有这些情况同样快.这些努力正在使用IonMonkey或v8的Crankshaft.这意味着您应该避免根据此信息进行优化,因为:
| 归档时间: |
|
| 查看次数: |
4549 次 |
| 最近记录: |