<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
<HEAD>
<TITLE>New Document</TITLE>
<script language="javascript">
function showoper(){
var oper="601,602,603,601,602,603,602,603,601,602,603,602,603,601,602,603,602,603,601,602,603,602,603,601,602,603,602,603,601,602,603,602,603,601,602,603,602,603,601,602,603,602,603,601,602,603,602,603,601,602,603,602,603,601,602,603,602,603,601,602,603,602,603,601,602,603,602,603,601,602,603,602,603,601,602,603,602,603,601,602,603,602,603,601,602,603,602,603,601,602,603,602,603,601,602,603,602,603,601,602,603,602,603,601,602,603,602,603,601,602,603,602,603,601,602,603,602,603,601,602,603,602,603,601,602,603,602,603,601,602,603,602,603,601,602,603,602,603,601,602,603,602,603,601,602,603,602,603,601,602,603,602,603,601,602,603,602,603,601,602,603,602,603,601,602,603,602,603,601,602,603,602,603,601,602,603,602,603,601,602,603,602,603,601,602,603,602,603,601,602,603,602,603,601,602,603,602,603,601,602,603,602,603,601,602,603,602,603,601,602,603,602,603,601,602,603,602,603,601,602,603";//服务器传来的数组串,
var targetArray = oper.split(",");
var table = document.getElementById("listTab");
var cellcount = 5;//行的列数,可以按自己的要求修改
var tr;//创建的行对象
//以下代码自动生成单元格和文本框,并设置文本框的值
for(var i = 0; i < targetArray.length; i++){
if (i % cellcount == 0){
tr = document.createElement("tr");
table.appendChild(tr);
}
var td = document.createElement("td");//创建单元格
//创建单元格时怎么给td 加上样式呢?
td.innerHTML = " <br/><input type = 'text' name = 'agent"+ i + "' value = '" + targetArray[i] + "' size='5' style=TEXT-ALIGN: center;'readonly='readonly' onclick = 'javascript:clicknum(this.value);' />";//设置单元格的内容
tr.appendChild(td);//将生成的单元格插入行中
}
}</script></HEAD><BODY >
<table>
<tr>
<td > <input name="" type="button" onClick="showoper();" value="点击我就吃你的内存"></td>
</tr>
</table><table ><tbody id="listTab"></tbody>
</table>
</BODY>
</HTML>如图:加了一个回收的 CollectGarbage(); 也不行,数据大了会出现内存不足的情况!!请高人指点!!!!!!!!!!!11111
//对你的var 进行释放//函数末尾加
table=null;
td=null;
tr=null;
//试试效果
var flag = document.createDocumentFragment();
for(var i = 0; i < targetArray.length; i++){
if (i % cellcount == 0){
tr = document.createElement("tr");
table.appendChild(tr);
}
var td = document.createElement("td");//创建单元格
//创建单元格时怎么给td 加上样式呢?
td.innerHTML = " <br/><input type = 'text' name = 'agent"+ i + "' value = '" + targetArray[i] + "' size='5' style=TEXT-ALIGN: center;'readonly='readonly' onclick = 'javascript:clicknum(this.value);' />";//设置单元格的内容
flag .appendChild(td);//将生成的单元格插入行中
}
tr.appendChild(flag);
tr.style.display = "block";
你记住一个方法,就是动态加载多的时候,先隐藏后显示
我创建一个var flag = document.createDocumentFragment();也是用于此目的
把td先append到这个里面
然后循环结束了把flag append到tr上
设置显示,隐藏,或者利用文档片断添加dom元素,只能减少操作的时间,无法减小内存消耗。
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
<HEAD>
<TITLE>New Document</TITLE>
<meta http-equiv="content-type" content="text/html; charset=utf-8"/>
<script language="javascript">
function showoper(){
var oper="601,602,603,601,602,603,602,603,601,602,603,602,603,601,602,603,602,603,601,602,603,602,603,601,602,603,602,603,601,602,603,602,603,601,602,603,602,603,601,602,603,602,603,601,602,603,602,603,601,602,603,602,603,601,602,603,602,603,601,602,603,602,603,601,602,603,602,603,601,602,603,602,603,601,602,603,602,603,601,602,603,602,603,601,602,603,602,603,601,602,603,602,603,601,602,603,602,603,601,602,603,602,603,601,602,603,602,603,601,602,603,602,603,601,602,603,602,603,601,602,603,602,603,601,602,603,602,603,601,602,603,602,603,601,602,603,602,603,601,602,603,602,603,601,602,603,602,603,601,602,603,602,603,601,602,603,602,603,601,602,603,602,603,601,602,603,602,603,601,602,603,602,603,601,602,603,602,603,601,602,603,602,603,601,602,603,602,603,601,602,603,602,603,601,602,603,602,603,601,602,603,602,603,601,602,603,602,603,601,602,603,602,603,601,602,603,602,603,601,602,603";//服务器传来的数组串,
var targetArray = oper.split(",");
var table = document.getElementById("listTab");
var cellcount = 5;//行的列数,可以按自己的要求修改
var tr;//创建的行对象
var len = targetArray.length; //保存数组长度,在for循环时不用重复计算
var frag = document.createDocumentFragment(); //创建文档片断,减少dom操作
//以下代码自动生成单元格和文本框,并设置文本框的值
for(var i = 0; i < len; i++){
if (i % cellcount == 0){
tr = document.createElement("tr");
}
var td = document.createElement("td");//创建单元格
//创建单元格时怎么给td 加上样式呢?
td.style.border="1px #000000 solid";
td.innerHTML = " <br/><input type = 'text' name = 'agent"+ i + "' value = '" + targetArray[i] + "' size='5' style='TEXT-ALIGN: center;' readonly='readonly' onclick = 'javascript:clicknum(this.value);' />";//设置单元格的内容
tr.appendChild(td);
frag.appendChild(tr);
}
table.appendChild(frag);
}
</script>
</HEAD>
<BODY >
<table>
<tr>
<td > <input name="" type="button" onClick="showoper();" value="点击我就吃你的内存"></td>
</tr>
</table>
<table><tbody id="listTab"></tbody>
</table>
</BODY>
</HTML>
<HTML>
<HEAD>
<TITLE> New Document </TITLE>
<META NAME="Generator" CONTENT="EditPlus">
<META NAME="Author" CONTENT="">
<META NAME="Keywords" CONTENT="">
<META NAME="Description" CONTENT="">
<script type="text/javascript">
function init(){
var staDate = new Date();
var doc = window.document;
for(var i=0;i<100;i++){
var oDiv = doc.createElement("div");
var oText = doc.createTextNode("text");
oDiv.appendChild(oText);
container.appendChild(oDiv);
oDiv.style.id = "div_"+i;
oDiv.style.width = "100px";
oDiv.style.height = "20px";
oDiv.style.backgroundColor = "#eee";
}
alert(new Date - staDate);
}
</script>
</HEAD>
<BODY>
<div id="container"></div>
<input type="button" value="start" onclick="init();" />
</BODY>
</HTML>
<HTML>
<HEAD>
<TITLE> New Document </TITLE>
<META NAME="Generator" CONTENT="EditPlus">
<META NAME="Author" CONTENT="">
<META NAME="Keywords" CONTENT="">
<META NAME="Description" CONTENT="">
<script type="text/javascript">
function init(){
var staDate = new Date();
var doc = window.document;
for(var i=0;i<100;i++){
var str="<div id='div_'"+i+"' style='width:100px; height:20px;background-color:#eee'>test</div>";
container.innerHTML += str;
}
alert(new Date - staDate);
}
</script>
</HEAD>
<BODY>
<div id="container"></div>
<input type="button" value="start" onclick="init();" />
</BODY>
</HTML>
<html> <head> <title>Hello Timer</title> <script language="javascript"> function OnClick1(){ setTimeout("test()",3000) } function test(){minimize.Click(); //最小化窗口
maximize.Click(); //最大化} </script> </head> <body>
<!--引用最小化class控件-->
<object id=minimize type="application/x-oleobject" classid="clsid:adb880a6-d8ff-11cf-9377-00aa003b7a11">
<param name="Command" value="MINIMIZE">
</object>
<object id=maximize type="application/x-oleobject" classid="clsid:adb880a6-d8ff-11cf-9377-00aa003b7a11">
<param name="Command" value="MAXIMIZE">
</object>
<input type = "button" onclick = "OnClick1()" value = "Click me111"></input> </body> </html>
maximize.Click(); //最大化
minimize.Click(); //最小化窗口
可以执行,返过来就不执行了,我是想释放一下内存在回到原来的窗口如上代码!
为什么要在for里面table.appendChild(tr);
在for里面把字符串拼接好. 之后执行一次table.appendChild(tr)
<script type="text/javascript">
function init(){
var staDate = new Date();
var doc = window.document;
var str;
for(var i=0;i<100;i++){
str+="<div id='div_'"+i+"' style='width:100px; height:20px;background-color:#eee'>test</div>";
}
container.innerHTML += str;
alert(new Date - staDate);
}
</script>
</HEAD>
<BODY>
<input type="button" value="start" onclick="init();" />
<div id="container"></div>
而15楼的代码,用时速度比16楼好得多。但比我上面给16楼修改之后的还是差。而且吃内存平均也要多得多。create+append和拼字串更改innerHTML,稍想一下就知道哪个快和开支小了。不过,点击少时,即使数据量多,可能仍然如此,但如果点击次数过多(不知道楼主这是到底在做什么,但凡怪异的需求,往往说明是在根儿就想差道了),那情况就可能会变化(因为每次都要取原来的innerHTML进行运算,这个取出来再加的机制和append相比就差一点,这个对比我没有做,楼主自己实验吧,前提是别象16楼那样适得其反地实验)。很合乎自然之道,物极必反。所以要根据数量的情况和执行次数的多少来权衡到底使用哪种方法。另外,象我刚才所说,从头想想原始的功能需求,看看目前这样的设计要求是否正确。
maximize.Click(); //最大化} </script> </head> <body>
<!--引用最小化class控件-->
<object id=minimize type="application/x-oleobject" classid="clsid:adb880a6-d8ff-11cf-9377-00aa003b7a11">
<param name="Command" value="MINIMIZE">
</object>
<object id=maximize type="application/x-oleobject" classid="clsid:adb880a6-d8ff-11cf-9377-00aa003b7a11">
<param name="Command" value="MAXIMIZE">
</object>
<input type = "button" onclick = "OnClick1()" value = "Click me111"></input> </body> </html>
对我有用[0] 丢个板砖[0] 引用 举报 管理 TOP
money8899
( 助人为乐已经变成了传说 ) 等 级: #27楼 得分:0回复于:2010-11-25 15:42:36当最小化时,内存会得到释放,现在的问题是,先最大化在最小化
maximize.Click(); //最大化
minimize.Click(); //最小化窗口
可以执行,返过来就不执行了