最近在司徒正美的《javascript框架设计》,在里面发现了一个段代码
1 ...... 2 3 var _len = arr1.length; 4 while (_len) { 5 arr2[--_len] = arr1[_len]; 6 } 7 8 ......
这是一个数组间赋值的操作,咋一看,之前还没碰到这样的写法。平时我个人都是这样写的。
1 function assignment2(arr1, arr2) { 2 for (var i = 0,_len = arr1.length; i < _len; i++) { 3 arr2[i] = arr1[i]; 4 } 5 }
这两个哪一个的效率更高呢?
为此我试着比较了一下。
1 function consoleRunTime() { 2 this.ti = 0; 3 this.start = function () { 4 this.ti = new Date().getTime(); 5 } 6 this.end = function () { 7 console.log(new Date().getTime() - this.ti); 8 } 9 }
在chrome的控制台下,处理一个长度为10000000的数组,第一类方法耗时2091ms,第二类耗时565ms。运行多次比较,第二类方法的耗时明显要比第一类少。这是为什么呢?
分析了一下,性能的瓶颈应该来至
1、while(_len)这个逻辑判断,在方法内部_len是整形,判断的时候需要转化为布尔型(效果等同于!!_len),这就比i<_len这个判断多做了处理。
至于深层次的内容,个人也不是很清晰,哎,学业不精啊,希望哪位大大可以帮忙解答啊!!