采用2次幂延迟算法的onload次序测试

2011-11-17 18:53

采用2次幂延迟算法的onload次序测试

by army

at 2011-11-17 10:53:17

original http://army8735.org/2011/11/17/1028.html

上篇。另外对于基础性原理不清楚的请查看射雕的介绍:http://lifesinger.wordpress.com/2011/11/11/get-url-in-module-loader/

通过1周的海量数据多次测试与研究,我和射雕发现了所有浏览器下都有的共同bug:onload事件先于script标签的加载发生。这个结论直接表明,目前所有对于script的onload的侦听都不是完美的!一旦有了这个低几率问题,那些莫名的错误会让人十分困惑。

介于此,我尝试使用2^ delay的算法来延迟onload的运行。它的理论基础来源于抑制网络风暴的算法:即onload先检查script的exec,没有时延迟2 ^ 0单位时间后再检查、再没有延迟2 ^ 1、2 ^ 2……以此类推。

在昨天的海量观测数据下面,结果是惊喜的。没有1次发生了error,全部正确。但是依然存在低几率次序打乱的情况,这是接下来要着手解决的问题(或者干脆忽略掉)。

最后祝福下Firefox和IE10,你们的顺序是100%正确的。

other success
AaBb 1
BbAa 1
Aa 1
AaBb 1
Bb 1
BAba 1
ABab 1
BbAa 1
BAba 1
ABab 1
Aa 1
AaBb 2
BbAa 3
Aa 3
BAba 3
Bb 4
Aa 5
BbAa 8
ABab 11
Bb 12
ABab 23
AaBb 23
Aa 26
AaBb 28
Bb 28
Aa 91
Bb 97
ABab 171
opera success
BbAa 1
BAab 1
ABba 1
BaAb 1
ABab 28
Bb 2742
Aa 2783
AaBb 5484
ie8 success
ABba 2
AbBa 8
BAab 17
BaAb 29
BAba 30901
BbAa 82405
AaBb 233970
Bb 599658
Aa 600632
ABab 853122
webkit success
ABba 2
BAab 2
BaAb 4
AbBa 5
BbAa 50606
Aa 246173
Bb 246419
AaBb 441956
ie10 success
BAba 2
AaBb 8
BbAa 9
Aa 29
Bb 31
ABab 36
ie9 success
AbBa 2
BaAb 4
BAab 30
ABba 159
BAba 8915
BbAa 15603
AaBb 35080
Aa 104627
Bb 105027
ABab 149314
ie7 success
AbBa 8
BaAb 12
BAab 35
ABba 81
BAba 11900
BbAa 25614
AaBb 66317
Aa 193519
Bb 193970
ABab 282723
ie6 success
ABba 10
AbBa 14
BAab 21
BaAb 57
BAba 50272
BbAa 104528
AaBb 275505
Bb 811928
Aa 813622
ABab 1189557
FF success
ABab 90
BbAa 5578
Bb 34745
Aa 34866
AaBb 63339