什么是多条件短路
型如 if (A && B && C) 这样的多个条件组成的逻辑语句,
通过调整每个因子的顺序,利用短路来实现执行效率的优化。
知乎:逻辑运算符特有的短路效应是什么
口说无凭,真实场景模拟测试
首先定义三个逻辑单元:
const conditionA = ()=>{ return Math.random() > 0.25;å } const conditionB = ()=>{ return Math.random() > 0.5; } const conditionC = ()=>{ return Math.random() > 0.75; }
显而易见, 以上三个逻辑, 返回 true的概率是逐渐递减的。
我们以此来做实验样本。
const Benchmark = require('benchmark'); const suite = new Benchmark.Suite; suite.add('A || B || C',function () { if(conditionA() || conditionB() || conditionC()){ // A或B或C, 大概率true的放前面 } }).add('C || B || A',function () { if(conditionC() || conditionB() || conditionA()){ // C或B或A, 小概率true的放前面 } }).add('A && B && C',function () { if(conditionA() && conditionB() && conditionC()){ // A且B且C,大概率true的放前面 } }).add('C && B && A',function () { if(conditionC() && conditionB() && conditionA()){ //C且B且A, 小概率true的放前面 } }).on('cycle',function (event) { console.log(String(event.target)); }).on('complete',function () { console.log('Fastest is ' + this.filter('fastest').map('name')); }).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也会短路。
明白了吗?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。