javascript UIThread阻塞 解决办法

运行循环大计算的时候,页面经常卡死,是因为浏览器的UIThread被阻塞。

解决方法使用setTimeOut和递归方法来将每个循环处理过程分割开来。

其中Go1按钮所对应的方法为:

function cal1(a){
for (var x=2;x<a;x++){
var i = 2,flag = 0;
for(;i<Math.sqrt(x);i++){
if(x%i==0) flag++;
}
if(flag==0) _re.append(x+" ");
}
}

Go2对应的方法为:

function cal2(a,b){
if (a<=b) return;
var i = 2,flag = 0;
for(;i<Math.sqrt(b);i++){
if(b%i==0) flag++;
}
if(flag==0) _re.append(b+" ");
setTimeout(function(){
cal2(a,b+1)
},1);
}

函数末尾调用自己,且间隔1ms,让UIThread有机会处理前台展示。

example:http://www.testlike.com/uithread/

posted @ 2014-03-03 21:28  右下  阅读(349)  评论(0)    收藏  举报