达夫设备 duff's device 勘误

之前阅读O'Reilly出版的《High Performance JavaScript》(猫头鹰书),发现其中错误真是不少。其中,讲到优化迭代次数的Duff's device方法,原版代码和优化版代码居然都出错!!害得我陷入死循环...

上网搜了搜,看到不少同学发现了错误,但是更多的人只是把源代码转发,并未纠正其错误,唏嘘不已。以后看书,还是要亲手运行代码,且同时看看勘误表吧~

原版:

//credit: Jeff Greenberg var iterations = Math.floor(items.length / 8), startAt = items.length % 8, i = 0; do { switch(startAt){ case 0: process(items[i++]); case 7: process(items[i++]); case 6: process(items[i++]); case 5: process(items[i++]); case 4: process(items[i++]); case 3: process(items[i++]); case 2: process(items[i++]); case 1: process(items[i++]); } startAt = 0; } while (--iterations);


原版勘误

The last line of the example code is: } while(--iterations); It should be changed to: } while(iterations--);


优化版:

//credit: Jeff Greenberg var i = items.length % 8; while(i){ process(items[i--]); } i = Math.floor(items.length / 8); while(i){ process(items[i--]); process(items[i--]); process(items[i--]); process(items[i--]); process(items[i--]); process(items[i--]); process(items[i--]); process(items[i--]); }

优化版勘误:

The first code example on page 67 should be: //credit: Jeff Greenburg var iterations = items.length % 8, i = items.length - 1; while(iterations){ process(items[i--]); iterations--; } iterations = Math.floor(items.length / 8); while(iterations){ process(items[i--]); process(items[i--]); process(items[i--]); process(items[i--]); process(items[i--]); process(items[i--]); process(items[i--]); process(items[i--]); iterations--; }

posted @ 2011-10-14 11:59  LordSoony  阅读(201)  评论(0编辑  收藏  举报