大家帮看看有些什么地方可以优化的,初学对象
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<title>JS对象</title>
</head>
<body>
<div id="moveId">
  <label>表格行:
  <input name="textfield" type="text" size="10" id="tr" />
  </label>
 表格列:
 <input name="textfield2" type="text" size="10" id="td" />
 <label>
 <input type="button" name="Submit" value="创建"  id="btn"/>
 </label>
</div>
<script type="text/javascript">function Table(tr,td){
this.tr = tr;
this.td = td;
}
Table.prototype.createTable = function(){
var st=(new Date()).getTime();
var tableHTML = "<table  width=\"100%\" border=\"1\">";
for(var i=0;i<this.tr;i++){
tableHTML += "<tr>"
for(var j=0;j<this.td;j++){
tableHTML +="<td bgcolor='" + bgcl() +"'>"+ rand(1,15) +"</td>";
}
tableHTML += "</tr>"
}
tableHTML +="</table>"

var cid = document.createElement("div");
cid.innerHTML = tableHTML;
document.body.appendChild(cid);//性能低部分
cid = null;

var st2=(new Date()).getTime() - st;
alert(st2);
}
var rand = function(value1,value2){
return Math.floor(Math.random()*(value2-value1+1)+value1);
}
var bgcl = function(){
var r,g,b;
r = rand(0,255).toString(16);
g = rand(0,255).toString(16);
b = rand(0,255).toString(16);
r = r.length<2?"0"+r:r;
g = g.length<2?"0"+g:g;
b = b.length<2?"0"+b:b;
//alert();
return "#"+r+g+b;

}
var btn = document.getElementById("btn"),
tr = document.getElementById("tr"),
td = document.getElementById("td");
btn.onclick = function(){
var reg = /^[1-9]\d*$/;
if(!reg.test(tr.value)||!reg.test(td.value)){
alert("数据不合格");
}else{
var table1 = new Table(tr.value,td.value);
table1.createTable();
}
}
bgcl();
//alert(rand(1,15));
</script>
</body>
</html>

解决方案 »

  1.   

    提供一下测试数据吧,为什么说他低性能呢?
    事实上不是appendChild的问题,而是前面的bgcl()和rand(1,15)以及tableHTML长字符串相加的性能低下。
      

  2.   

    //我给你写一个随机颜色函数的高效版本var bgcl0 = ['','00000','0000','000','00','0'];
    function bgcl(){
        var s = (Math.random()*0x1000000|0).toString(16), n=s.length;
        return "#"+ (n==6 ? s : (bgcl0[n] + s));
    }
    整个的js代码是这样:
    function Table(tr,td){
        this.tr = tr;
        this.td = td;
    }
    Table.prototype.createTable = function(){
        var st=new Date();
        var tableHTML = ["<table  width=\"100%\" border=\"1\">"];
        var rows=this.tr, cols;
        while(rows--){
            tableHTML.push ( "<tr>" );
            cols=this.td;
            while(cols--){
                tableHTML.push ( "<td bgcolor='" + bgcl() +"'>"+ (Math.random()*15|0) +"</td>" );
            }
            tableHTML.push ( "</tr>" );
        }
        tableHTML.push ( "</table>" );
        console.log((new Date()-st)+' ms');    st=new Date();
        var cid = document.createElement("div");
        cid.innerHTML = tableHTML.join('');
        document.body.appendChild(cid);
        console.log((new Date()-st)+' ms');
        cid = null;
    }
    var bgcl0 = ['','00000','0000','','00','0',''];
    function bgcl(){
        var s = (Math.random()*0x1000000|0).toString(16), n=s.length;
        return "#"+ ((n==6||n==3) ? s : (bgcl0[n] + s));
    }
    var btn = document.getElementById("btn"),
        tr = document.getElementById("tr"),
        td = document.getElementById("td");
    btn.onclick = function(){
        var reg = /^[1-9]\d*$/;
        if(!reg.test(tr.value)||!reg.test(td.value)){
            alert("invalid data");
        }else{
            var table1 = new Table(+tr.value,+td.value);
            table1.createTable();
        }
    }
    bgcl();