在优化之前写的代码的时候, 我产生了这个问题 : JS当中需要使用移位操作么?
具体情景:由计算机组成原理的知识我们知道, 在计算机当中我除法运算的运行时间要比乘法运算慢很多 ,我就在想能不能把乘法运算转化为移位运算,比方说除以2转化成为向右移动一位。
结论 : JS当中移位运算有其特定的用途,用移位操作替代除法运算并不可取。
原因:
1.可读性很差,不容易维护。 协作开发,Simple is good。
2.js继承了java当中”&”、“|“、“ >>"等移位运算符号,这些移位运算符号是针对整型, 而我们都知道js数字的保存都是双精度浮点型 ,举个列子
int c=3;
printf(c/2);//1
//c语言当中整数除法会进行取整的处理
console.log(3/2);
//结果就是1.5
那么js在使用移位运算的时候 ,首先就会将双精度浮点型转化为32位的整型,这个时候会出现两个问题。
问题一: 类型转化需要一定的开销, 那么此时移位运算还有优势么,有博主在他的知乎回答当中做了相应的解答, 这个优化的时间是微乎其微的,具体可以看他的博文,其中还详细列举了 移位运算的应用情况。
问题二:js所表示的数字为53位, 是大于32位的,那么数字一旦过大,js会进行截断处理,导致错误。
3.JS是一门动态语言,在这方面做再多的功课也无法拯救其运行速度大大慢于静态语言的事实, 前端的优化应该在其他方面上优化,比方说减少没必要的反复渲染等
4.c++以及java在编译器方面都有做除法优化, 具体看这文章灵魂拷问:用移位来代替除法运算真的效率高吗?Java 编译器到底有没有做除法优化?, js或许也有类型情况。
5.考虑到不同浏览器存在的不同情况, 也是非常不建议
PS: 博主刚刚莽上研究生,技术还比较菜, 通过博客记录学习, 有错误的地方请指正