示范了两种方法,test2是加速过的,时间复杂度是O1,数据多时明显要快很多:<BODY>
<select style="width:80" id=s1></select>
<button onclick="test1()">test1</button>
<button onclick="test2()">test2</button>
<SCRIPT>
function test1(){
var d=new Date()
var s="<select style=\"width:80\" id=s1>";
for (var i=0;i<3000;i++)
s += "<option value="+i+">"+i+"</option>";
s += "</select>";
s1.outerHTML = s;
alert("time used:"+(new Date()-d))
}
function test2(){
var d=new Date();
var s=new Array();
s[0]="<select style=\"width:80\" id=s1>";
for (var i=0;i<3000;i++)
s[i+1] = "<option value="+i+">"+i+"</option>";
s[s.length] = "</select>";
s1.outerHTML = s.join("");
alert("time used:"+(new Date()-d))
}
</SCRIPT>
</BODY>
<select style="width:80" id=s1></select>
<button onclick="test1()">test1</button>
<button onclick="test2()">test2</button>
<SCRIPT>
function test1(){
var d=new Date()
var s="<select style=\"width:80\" id=s1>";
for (var i=0;i<3000;i++)
s += "<option value="+i+">"+i+"</option>";
s += "</select>";
s1.outerHTML = s;
alert("time used:"+(new Date()-d))
}
function test2(){
var d=new Date();
var s=new Array();
s[0]="<select style=\"width:80\" id=s1>";
for (var i=0;i<3000;i++)
s[i+1] = "<option value="+i+">"+i+"</option>";
s[s.length] = "</select>";
s1.outerHTML = s.join("");
alert("time used:"+(new Date()-d))
}
</SCRIPT>
</BODY>
解决方案 »
- ajax异步 数据保存和界面交互
- 菜鸟提问,关于deleteRow后单元格丢失
- 求一正则表达式过滤掉空白字符但是保留单独的右斜杠。
- Ext中的FormPanel如何用回车来却换焦点
- 增加和移除事件,在线等!
- js 让flash 导入指定url的图片
- JSP中怎么把checkbox的值传给JS实现的右键
- javascript写的前台聊天功能,求帮助!
- iDiv.insertRow().insertCell(); 添加了一个 <tr><td></td></tr>,在用 innerHTML 给<td>赋值,怎样获得这是的<td>宽度?谢谢~~~
- easyDialog.open 嵌套调用问题
- 菜鸟问题
- js的word问题 在线等待!!!
对于上一条使用 HTML 文本方法的规则来说,将大量 OPTION(英文)元素添加到 SELECT(英文)中的情况是一种例外。这时候,使用 innerHTML 属性比调用 createElement 方法访问选项集合效率更高。 技巧 5:使用 innerHTML 将大量选项添加到 SELECT 元素中。
使用字符串连接操作来建立 SELECT 元素的 HTML 文本,然后使用此技巧设置 innerHTML 属性。对于数量特别大的选项,字符串连接操作也会影响性能。在此情况下,请建立一个数组并调用 Microsoft JScript® join(英文)方法来执行 OPTION 元素 HTML 文本的最终连接。请显示慢: var opt;
divUpdate.innerHTML = "<SELECT ID='selUpdate'></SELECT>";
for (var i=0; i<1000; i++)
{
opt = document.createElement( "OPTION" );
selUpdate.options.add( opt );
opt.innerText = "第 " + i + " 项";
}快: var str="<SELECT ID='selUpdate'>";
for (var i=0; i<1000; i++)
{
str += "<OPTION>第 " + i + " 项</OPTION>";
}
str += "</SELECT>";
divUpdate.innerHTML = str;更快: var arr = new Array(1000);
for (var i=0; i<1000; i++)
{
arr[i] = "<OPTION>第 " + i + " 项</OPTION>";
}
divUpdate.innerHTML = "<SELECT ID='selUpdate'>" + arr.join() + "</SELECT>";
1.
动态创建Element是最慢的。
如:opt = document.createElement( "OPTION" );2.
字符串连接是其次.
如: str += "<OPTION>第 " + i + " 项</OPTION>";
当字符串很小的时候,这个操作还比较快,但是当循环到一定程度的时候
str变得很大,每次的操作都会变慢3
数组连接最快了,用 Array.join方法
http://expert.csdn.net/Expert/TopicView1.asp?id=752688
------------------------------------------------
更快: var arr = new Array(1000);
for (var i=0; i<1000; i++)
{
arr[i] = "<OPTION>第 " + i + " 项</OPTION>";
}
divUpdate.innerHTML = "<SELECT ID='selUpdate'>" + arr.join() + "</SELECT>";
------------------------------------------------其中的arr.join()应该写为arr.join("")比较好。因为arr.join()会自动在每两个数组元素之间插入一个默认的分隔符(逗号),虽然它不会被显示出来,但是 ...</option>,<option>... 这样的一个串显然不是我们原来想要的。
var d=new Date();
var s=new Array();
s[0]="<select style=\"width:80\" id=s1>";
for (var i=0;i<3000;i++)
s[i+1] = "<option value="+i+">"+i+"</option>";
s[s.length] = "</select>";
s1.outerHTML = s.join("");
alert("time used:"+(new Date()-d))
}
function test3(){
var d=new Date();
var s=new Array();
s[0]="<select style=\"width:80\" id=s1><option value=";
for (var i=0;i<3000;i++)
s[i+1] = i+">"+i;
s[s.length] = "</option></select>";
s1.outerHTML = s.join("</option><option value=");
alert("time used:"+(new Date()-d))
}
function test2(){
var d=new Date();
var s=new Array();
s[0]="<select style=\"width:80\" id=s1>";
for (var i=0;i<3000;i++)
s[i+1] = "<option value="+i+">"+i+"</option>";
s[s.length] = "</select>";
s1.outerHTML = s.join("");
alert("time used:"+(new Date()-d))
}
function test3(){
var d=new Date();
var s11=new Array();
s11[0]="<select style=\"width:80\" id=s1><option value=";
for (var i=1;i<3001;i++)
s11[i] = i+">"+i;
s12 = "</select>";
s1.outerHTML = s11.join("<option value=")+s12;
alert("time used:"+(new Date()-d))
}
似乎是:主要时间花在“s1.outerHTML=thestr”,即:将字符串解释出来
function test2(){
var a,b,c,d;
a=new Date();
var s=new Array();
for (var i=0;i<3000;i++)
s[i+1] = "<option value="+i+">"+i+"</option>";
s[0]="<select style=\"width:80\" id=s1>";
s[s.length] = "</select>";
b=new Date();
var thestr = s.join("");
c=new Date();
s1.outerHTML=thestr;
d=new Date();
alert("time used:\n"+a*1+"-->\n"+b*1+"-->\n"+c*1+"-->\n"+d*1)
}