如果里面是执行str+="";的话
建议用Arrayvar s="";
var arr=new Array();
for(var i=0;i<10000;i++){
arr.push("aaaaaaaa");
}
s=arr.join("");如果是操作Array
看这个帖子:
http://hi.baidu.com/yoyobp/blog/item/25848954fc9c501f3a29351a.html

解决方案 »

  1.   

    for
      for
        for...
    几万次?
      

  2.   

    要在前台给listbox添加数据,几万条数据啊
      

  3.   

    listbox是指什么?多选的select?
    可以先把select隐藏掉,再执行你的程序,执行完再显示,select这个东西这样执行会快很多
    循环的过程中注意别潜逃太深,最好给些代码我们好调试
      

  4.   

    用ajax在后台返回的dataset 里面的数据绑定在listbox 数据有两万多条
      

  5.   

    function OpenDocument(iCategoryID)
    {

    //alert(iCategoryID);
    var obj = NoticeEdit.News_UserMaster.GetBelong1Result(iCategoryID);
    if(obj.value != null)
    {
    document.all("lbxleft").length = 0;
    var ds=obj.value;
    if(ds != null && typeof(ds) == "object" && ds.Tables != null)
    {
    for(var i=0;i<ds.Tables[0].Rows.length;i++)
    {
    var name = ds.Tables[0].Rows[i].EmployeeName;
    var id = ds.Tables[0].Rows[i].EmployeeCode;
    document.all("lbxleft").options.add(new Option(name,id));
    }
    }
    else
    {}
    }
    }
      

  6.   

    ds.Tables[0].Rows[i]这里就有嵌套
    document.all("lbxleft")这里也有,要改下
      

  7.   

    for(var i=0;i<ds.Tables[0].Rows.length;i++)
    {
    var name = ds.Tables[0].Rows[i].EmployeeName;
    var id = ds.Tables[0].Rows[i].EmployeeCode;
    document.all("lbxleft").options.add(new Option(name,id));

    }
    主要是这段
      

  8.   

    var objRows=ds.Tables[0].Rows
    var objRowsLength=objRows.length
    var objlbxleft=document.all("lbxleft").options
    for(var i=0;i<objRowsLength;i++)
    {
    var name = objRows[i].EmployeeName;
    var id = objRows[i].EmployeeCode;
    objlbxleft.add(new Option(name,id));
    }
      

  9.   

    for(var i=0;i<ds.Tables[0].Rows.length;i++)
    {
    //var name = ds.Tables[0].Rows[i].EmployeeName;
    //var id = ds.Tables[0].Rows[i].EmployeeCode;
    document.all("lbxleft").options.add(new Option(ds.Tables[0].Rows[i].EmployeeName,ds.Tables[0].Rows[i].EmployeeCode));

    }
    还是不行
      

  10.   

    建议用多层for循环和分子组合。。最后最好能option.innerHTML = "";这样的效率是最高的。。
      

  11.   

    for(var i=0;i<ds.Tables[0].Rows.length;i++)
    {
            document.all("lbxleft").options.add(new Option(ds.Tables[0].Rows[i].EmployeeName,ds.Tables[0].Rows[i].EmployeeCode));

    }
    只要你的语句中有上述单个的循环和DOM操作,速度别想提多少
      

  12.   

    var l=ds.Tables[0].Rows.length;
    for(var i=0;i<l;i++)
    {

    //var name = ds.Tables[0].Rows[i].EmployeeName;
    //var id = ds.Tables[0].Rows[i].EmployeeCode;
    document.all("lbxleft").options.add(new Option(ds.Tables[0].Rows[i].EmployeeName,ds.Tables[0].Rows[i].EmployeeCode));

    }
      

  13.   

    var l=ds.Tables[0].Rows.length;
    for(var i=0;i<l;i++)
    {
    var obj=ds.Tables[0].Rows[i];
    //var name = ds.Tables[0].Rows[i].EmployeeName;
    //var id = ds.Tables[0].Rows[i].EmployeeCode;
    document.all("lbxleft").options.add(new Option(obj.EmployeeName,objEmployeeCode));

    }
      

  14.   

    应该还可以优化下
    <script language=javascript>
    function OpenDocument(iCategoryID)
    {

    //alert(iCategoryID);
    var obj = document.getElementById(iCategoryID);
    if(obj.value != null)
    {

    var ds=obj.value;
    if(1==1)
    {
    var temp=new Array();
    temp[0]='<select name="lbxleft">'
    for(var i=0;i<10000;i++)
    {
    var name = i;
    var id = i;
    temp[temp.length]="<option value='"
    temp[temp.length]=id
    temp[temp.length]="'>"
    temp[temp.length]=name
    temp[temp.length]="</option>"

    }
    temp[temp.length]="</select>"
    document.all("lbxleft").outerHTML=temp.join("");
    }
    else
    {}
    }
    }
    </script>
    <select name="aaa" onchange=OpenDocument(this.name)>
    <option value="bbb">bbb</option>
    <option value="ccc">ccc</option>
    </select>
    <select name="lbxleft"></select>
      

  15.   

    上面有例子呀,直接存成一个HTM文件就可以了
    下面的代码会比上面的快一点
    <script language=javascript>
    function OpenDocument(iCategoryID)
    {
    var a=new Date()
    //alert(iCategoryID);
    var obj = document.getElementById(iCategoryID);
    if(obj.value != null)
    {

    var ds=obj.value;
    if(1==1)
    {
    var temp=new Array();
    temp[0]='<select name="lbxleft">'
    for(var i=0;i<10000;i++)
    {
    var name = i;
    var id = i;
    temp[temp.length]="<option value='"+id+"'>"+name+"</option>"
    /*temp[temp.length]=id
    temp[temp.length]="'>"
    temp[temp.length]=name
    temp[temp.length]="</option>"
    */
    }
    temp[temp.length]="</select>"
    document.all("lbxleft").outerHTML=temp.join("");
    }
    else
    {}
    }
    document.getElementById("div1").innerHTML=new Date()-a
    }
    </script>
    <select name="aaa" onchange=OpenDocument(this.name)>
    <option value="bbb">bbb</option>
    <option value="ccc">ccc</option>
    </select>
    <select name="lbxleft"></select>

    <div id="div1"></div>
      

  16.   

    js无多线程,1万条记录不算多
    不过 效率上来说 objlbxleft.add(new Option(name,id)); 是比较慢
    可以考虑用 innerHTML的方式,楼上hbhbhbhbhb1021(天外水火(我要多努力)) 的方式,先拼装成html的字符串,然后 用innerHTML方式生成是相对比较快的
      

  17.   

    用outerHTML一次赋值较好!! ( 开源的基于ajax的可视化自定义web表单工具, 在: http://my5155.meibu.com )
      

  18.   

    数据量有点大。不过LZ可采用setTimeout试试。
    function test()
    {
    //do something
    setTimeout("test",10);
    }
    这样不会造成拥堵,但是载入会比较慢
      

  19.   

    你可以定义一个div,然后动态从server端取数据,server直接传送html代码到客户端,类似于:serverString="<select><option></option>...</select>",然后直接用div.innerHTML=serverString就行了,这样浏览器里就没有循环了,取决于你服务器代码的优化状况了。
      

  20.   

    setTimeout是正解!
    运行一个月的循环都不会死掉。
      

  21.   

    up一下个人签名~~
    ---------------------------
    惊爆支持ASP、ASP.NET2.0空间500M+SQL数据库100M 特惠价格:128一年
    http://www.myidc.info/webhost/stylehost.aspx