如果是代码问题,可以优化,否则就用setTimeout进行0延迟,但多数是代码问题了,贴代码出来吧。

解决方案 »

  1.   

    会出现这种情况应该是设计问题或者算法问题了,有个不是办法的办法,用setInterval函数,间隔一段时间运行一次循环体内的代码,这样就不会死了。不过这样会有同步问题。还是应该要重新思考下设计。
      

  2.   

    在循环过程中,尽量不要读写页面元素.
    例如
    for(i=0;i<input.value;i++){
    ...
    }
    这样就不好,每次都要读一次 input 里的东西.
    改为
    v = input.value;
    for(i=0;i<v;i++){
    ...
    }
    这样会快很多
      

  3.   

    请不要说设计问题,数据量非常大的时候,设计再好,也会有很大的运算量。
    代码很简单,因为一些原因不能将代码完全写在这里,还请大家见谅。
    代码大概情况:
    str = [];
    strLength = 0;
    for(var i = 0;i < NUM1;i++)
        for(var j = 0;j < NUM1;j++)
            str[strLength++] = DATA[i].data[j];
    tempStr = str.join("");NUM1很大10^4以上,NUM2不是很大100以内这样是否能优化算法?不能的话是否可以不让浏览器假死?
      

  4.   

    还有DATA[i].data[j]不能join因为要其前后加一些判断
      

  5.   

    "请不要说设计问题,数据量非常大的时候,设计再好,也会有很大的运算量。"
    -----数据量很大,不一定要一次下载或显示在客户端,可以分页显示另:七楼的代码还是有一到两成的改进空间的:
    <script>
    var DATA = new Array(1000);
    DATA[500]=[]
    DATA[500].data=new Array(100);
    DATA[500].data[50]="1";var NUM1=1000;
    var NUM2=100;
    function fun1(){
    str   =   []; 
    strLength   =   0; 
    for(var   i   =   0;i   <   NUM1;i++) 
            for(var   j   =   0;j   <   NUM2;j++) 
                    str[strLength++]   =   DATA[500].data[50]; 
    return  str.join(""); 
    }function fun2(){
    str   =   []; 
    strLength   =   0; 
    for(var   i   =   0;i   <   NUM1;i++) {
            var tempData=DATA[500].data;
            for(var   j   =   0;j   <   NUM2;j++) 
                    str[strLength++]   =   tempData[50]; 
    }
    return  str.join(""); 
    }
    var d0=new Date();
    fun1();
    var d1=new Date();
    fun2();
    var d2=new Date();alert((d1-d0)+"\n"+(d2-d1));</script>
      

  6.   

    用setTimeout外带个延时计数器 系统崩溃前再大的数据量也卡不死 坏处是 慢了点var i=0,n=16;//n根据循环执行内容的效率n可以适当改大点。不过好像没必要低于16貌似js引擎的心跳速率是16。
    function aac()
    {
    if(i++<1000000000){window.status=i;setTimeout(aac,n);}
    }
    aac();