多条件短路优化实测

什么是多条件短路

型如 if (A && B && C) 这样的多个条件组成的逻辑语句,


通过调整每个因子的顺序,利用短路来实现执行效率的优化。


知乎:逻辑运算符特有的短路效应是什么


口说无凭,真实场景模拟测试


首先定义三个逻辑单元:


const conditionA = ()=>{\n  return Math.random() > 0.25;\n}
const conditionB = ()=>{\n return Math.random() > 0.5;\n}
const conditionC = ()=>{\n return Math.random() > 0.75;\n}复制代码

显而易见, 以上三个逻辑, 返回 true的概率是逐渐递减的。


我们以此来做实验样本。


const Benchmark = require('benchmark');\nconst suite = new Benchmark.Suite;
suite.add('A || B || C', function () {\n if(conditionA() || conditionB() || conditionC()){\n // A或B或C, 大概率true的放前面\n }\n}).add('C || B || A', function () {\n if(conditionC() || conditionB() || conditionA()){\n // C或B或A, 小概率true的放前面\n }\n}).add('A && B && C', function () {\n if(conditionA() && conditionB() && conditionC()){\n // A且B且C, 大概率true的放前面\n }\n}).add('C && B && A', function () {\n if(conditionC() && conditionB() && conditionA()){\n //C且B且A, 小概率true的放前面\n }\n}).on('cycle', function (event) {\n console.log(String(event.target));\n}).on('complete', function () {\n console.log('Fastest is ' + this.filter('fastest').map('name'));\n}).run({ 'async': true });复制代码

以上代码应该比较好懂, 测试 ||&& 两种情况下,不同的排列顺序对执行效率的影响,


如果实在思路转不过来, 多看几遍代码。


结果:

A || B || C x 29,734,965 ops/sec ±1.42% (88 runs sampled)
C || B || A x 19,663,159 ops/sec ±0.57% (90 runs sampled)
A && B && C x 19,865,675 ops/sec ±0.63% (89 runs sampled)
C && B && A x 30,679,108 ops/sec ±0.52% (88 runs sampled)复制代码

结论:


  • 多个 || 条件,把大概率true的条件写最前面,效率更高。
  • 多个 && 条件,把小概率true的条件写最前面,效率更高。

为什么?

||遇到true就会短路, 反之, &&遇到false也会短路。


明白了吗?


完整代码:将上面两段合在一起就是。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值