摘要:原文地址多条件短路优化实测什么是多条件短路型如这样的多个条件组成的逻辑语句,通过调整每个因子的顺序,利用短路来实现执行效率的优化。结果结论多个条件,把大概率的条件写最前面,效率更高。
原文地址:多条件短路优化实测
什么是多条件短路型如 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也会短路。
明白了吗?
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/93305.html
摘要:作用是存储获取锁失败的阻塞线程。独占模式下,锁是线程独占的,而共享模式下,锁是可以被多个线程占用的。等方法就是让线程阻塞加入队列唤醒线程等。该方法其实就是自旋尝试获取锁或阻塞线程子类实现决定。 AQS,全称AbstractQueuedSynchronizer,是Concurrent包锁的核心,没有AQS就没有Java的Concurrent包。它到底是个什么,我们来看看源码的第一段注解是...
摘要:首先得介绍下短路原理,一共就以下四点非常关键只要前面为不管后面是还是,都返回后面的值。正常思路也是最简单的思路就是条件语句,如下结束但是代码看起来非常的多,虽然方便阅读,但是不方便装逼啊使用短路原理大大精简条件语句代码,如下怎么样,就一行把 首先得介绍下短路原理,一共就以下四点(非常关键): 1、只要||前面为false,不管||后面是true还是false,都返回||后面的值。 2、...
showImg(https://segmentfault.com/img/remote/1460000018734296?w=900&h=500); 简介 可读性、性能、Spread、Reduce 在 优雅三连击 中有同学提到了 可读性 这个关键词,就小二个人的观点 在某个范围内使用比较常用到的小技巧,可以提升一定的可读性,文中提到的短路运算在初始化变量是提升可读性的,并且在很多提倡优化if 语句...
摘要:移植到中的一个典型的达夫设备的例子为一个很长很长的数组。但是达夫设备最初这种诡异的写法和思路,还是惊艳了很多人的,值得我们思考。高性能阅读简记一高性能阅读简记二高性能阅读简记三 四、Aligorithms and Flow Control 算法和流程控制 1、Loops 循环 a、避免使用for/in循环在JavaScript标准中,有四种类型循环。for、for/in、while、...
摘要:移植到中的一个典型的达夫设备的例子为一个很长很长的数组。但是达夫设备最初这种诡异的写法和思路,还是惊艳了很多人的,值得我们思考。高性能阅读简记一高性能阅读简记二高性能阅读简记三 四、Aligorithms and Flow Control 算法和流程控制 1、Loops 循环 a、避免使用for/in循环在JavaScript标准中,有四种类型循环。for、for/in、while、...
阅读 1873·2021-11-22 14:44
阅读 1638·2021-11-02 14:46
阅读 3579·2021-10-13 09:40
阅读 2574·2021-09-07 09:58
阅读 1459·2021-09-03 10:28
阅读 1628·2019-08-29 15:30
阅读 946·2019-08-29 15:28
阅读 1438·2019-08-26 12:20