相信各位小伙伴在开发中肯定经常遇到if else 的这种判断,俗话说的好能用if else的时候就不选择其他方式。如果是遇到两种结果的判断这种,使用if else还是比较优雅的,但是当系统在后续的维护中不停的加入判断条件时,这时候我们的代码看起来就会像屎山一样,不仅不易读,而且可维护行降低了许多。
另外提醒友友们,我这里使用if else-if 并没有使用 if ,相信大家都是懂得的,这么做的方式性能会更好,如果使用下面的方式的话,每次执行判断会把所有的判断都执行一遍,而上边的else-if 就避免了这种问题。
可是即使使用if else-if的方式的真的是性能最好的么?这种方式在大量判断的时候依然还是屎山。本着求知的精神,今天在开发中我也遇到了这种情况,且看我如何优化的吧!(前端菜鸡,不喜勿喷)。
今天PM提了个小小的需求,让我改一下系统中天气预报的图标显示,将天气接口自带的图标换成UI 自己画的,另外让人无语的就是后端不动逻辑,全由前端控制(就是因为后端懒)。好吧,谁让咱听话呢,一个字: 干(改)!因为之前的代码并不是我写的,改别人的代码是最让人难受的,虽然有心理准备但是看到的时候也是惊讶了一番,如下:
当然U1S1,这么做一点问题也没有,就是可读性不高。天气的状况大概有几十种,下雪,下雨,下冰雹了都是。既然考虑性能,我先来算一算 if else的方式的时间复杂度在最坏情况下也就是每条都查一遍,有多少查多少这不 O(n)么,只要比O(n)低那就是正确的。想想在JS中比O(n)低的,有个查找对象属性键的好像是才用的Hash查找,这种方式的时间复杂度是O(1),且在最坏的情况下才是O(n), (这里我不晓得我的理解是不是对的,欢迎各位大佬指正)。
于是我想到了才用JSON对象的方式将天气状况的关系用key-value的方式预存起来,使用查找key 的方式去查找天气所对应的图标信息。这样做会不会更好呢? 最起码 在代码可读性上提高了很多。
是不是简洁了许多呢?下面为了验证这么做的性能是比if-else的方式好的我做了打印时间的处理,在经过测试,最好的情况下二者的差距不大。
但是在最坏的情况下JSON对象的优势就体验出来了,几乎快了10倍,虽然这点速度对现在的浏览器来说是渣渣,但是起码性能不是提高了0.00x毫秒么,对吧,优化优化成功了。
这么看来,各位友友们在遇到多种判断的时候尽量避免if-else吧!(不强求,各有所好啦!)