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有机会处理前台展示。

浙公网安备 33010602011771号