网站首页 > 知识剖析 正文
map映射+异步加载 完美过渡 if else
前言
代码写到一定程度,让人看着舒适十分重要。今天写业务的时候看着各种if else嵌套,内心一阵起伏。
if else的痛心
看多了if else让人头疼欲裂。贴点代码让大家感受一下痛苦吧~
function a (x, y) { let status if (x) { if (y) { status = func(10) } else { status = func(20) } } else { if (y) { status = func(30) } else { status = func(40) } } return status } 复制代码
随着业务的复杂度和难度,这种嵌套会变成地狱。但if else只会执行一个分支。比较与接下来的map映射还是很好的。
map映射
map映射就是键值对的读取,把分支状态信息预先缓存在Map里。最大的好处就是,非常直观
function b (x, y) { let map = { isX: { isY: func(10), not: func(20) }, not: { isY: func(30), not: func(40) } } let firstKey = x ? 'isX' : 'not' let lastKey = y ? 'isY' : 'not' return map[firstKey][lastKey] } 复制代码
对于复杂度、计算度较小的计算采用这种map对象没啥大问题。但随着计算量和复杂度的上升,预先缓存就会把所有的分支代码都执行了一遍,结果不言而喻。基于此的解决方案是异步加载。
map映射+异步加载
异步加载可以无痛解决上面b方法中的痛处。通过计算最后只走进一个分支并执行,与if else的责任链执行结果一致。
function c (x, y) { let map = { isX: { isY: () => func(10), not: () => func(20) }, not: { isY: () => func(30), not: () => func(40) } } let firstKey = x ? 'isX' : 'not' let lastKey = y ? 'isY' : 'not' return map[firstKey][lastKey]() } 复制代码
三种方法性能测试对比
在复杂度较小的计算中,很难看出差异。所以为了看出差距,func()如下:
function func (k) { for (let i = 0; i < 100000000; i++) { k += i } return k } 复制代码
这样对于每个分支的执行性能都一致。方便测试。这里测试计时采用console.time('a'),适用于一些精度较小的计时。
console.time('a') console.log('计算结果:' + a(10, 10)) console.timeEnd('a') 复制代码
这是执行时间,为了更精确一下,各执行五次取平均值:
方法单次单次单次单次单次平均a(10,10)117.945ms119.253ms121.727ms119.707ms119.263ms119.579msb(10,10)460.455ms464.009ms461.411ms462.981ms459.825ms461.7362msc(10,10)119.670ms119.710ms121.176ms119.572ms118.396ms119.7048ms
由以上数据的平均执行时间相比较,map映射+异步加载与if else的性能消耗大致相同,所以结论也就有了。而我更喜欢编程式代码风格,更青睐map映射+异步加载,如有其它更有的方法欢迎交流~
猜你喜欢
- 2024-11-17 CSV Parquet Avro:为正确的工作选择合适的工具
- 2024-11-17 JS基础进阶- 同步异步编程和EventLoop底层机制
- 2024-11-17 5个你应该知道的JavaScript技巧,不能错过!
- 2024-11-17 Chrome控制台的一些有用API(chrome控件)
- 2024-11-17 Javascript调试器自编代码及运用(js调试工具和方法如何使用)
- 2024-11-17 NET中的定时器:种类与应用场景(winform定时器)
- 2024-11-17 全栈之路:从一个深拷贝开始循序渐进
- 2024-11-17 localStorage灵魂五问。 5M??10M(灵魂官方网站)
- 2024-11-17 JS中用于跟踪程序执行时间的专用函数,两个同时出现截断时间戳
- 2024-11-17 动手写一个简易的 Virtual DOM,加强阅读源码的能力
- 最近发表
- 标签列表
-
- xml (46)
- css animation (57)
- array_slice (60)
- htmlspecialchars (54)
- position: absolute (54)
- datediff函数 (47)
- array_pop (49)
- jsmap (52)
- toggleclass (43)
- console.time (63)
- .sql (41)
- ahref (40)
- js json.parse (59)
- html复选框 (60)
- css 透明 (44)
- css 颜色 (47)
- php replace (41)
- css nth-child (48)
- min-height (40)
- xml schema (44)
- css 最后一个元素 (46)
- location.origin (44)
- table border (49)
- html tr (40)
- video controls (49)