`

Javascript createElement和innerHTML增加页面元素的使用对比

阅读更多

最近遇到js的效率问题,是关于在页面中新增元素的问题;

假设:我们有页面如下

<!----><HTML>
<HEAD>
</HEAD>
<BODY>
<div id="div1"></div>
</BODY>
<script>
   
// 脚本位置
</script>
</HTML>

 

现在,我们要往div1中添加对象,大家都知道在为web页面增加一个元素时可以使用如下代码:

 

<!---->

// 方法1

div1.innerHTML = '<a href="">测试</a>';

或者:

<!---->

// 方法2

var a = document.createElement('a');

 

 

a.innertText = '测试';
div1.appendChild(a);

 在网上搜索到一个探讨js效率问题的文章,其大概意思是说方法2的效率高,其对比代码如下

 

<!---->// 方法1
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);
}
<!---->//方法2
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);
}

其页面中有:

<!----><div id="container"></div>
<input type="button" value="start" onclick="init();" />

从执行效果来看方案2要比方案1快10倍左右,到底这是不是真的呢?其实上面的测试代码是有待商榷的,且看其方法1中的循环代码:

<!---->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;
}

 其中有很多字符串操作,而且除了使用+号来连接字符串外,还使用了+=操作符,这就是问题的所在了,在javascript中这种操作字符串的做法是严重影响效率的,所以使用上面的方法来测试createEmenent和innerHTML的效率对innerHTML是不公平的, 据此看来很可能是字符串操作吃掉了innerHTML的性能,于是写了下面的测试代码

<!----><HTML>
<HEAD>
</HEAD>
<BODY>
<input type="button" value="测试1" onclick="test1()" /><input type=text readonly id=t1>
<input type="button" value="测试2" onclick="test2()" /><input type=text readonly id=t2>
<input type="button" value="清空" onclick="div1.innerHTML = ''; div2.innerHTML = ''; t1.value=''; t2.value = '';" />
<div id="div1"></div>
<div id="div2"></div>
</BODY>
<script>
function test1()
{
    
var d = new Date();
    
var buf = new Array();
    
for (var n = 0; n < 1000; n ++)
    {
        buf.push(
'<a href="">测试');
        buf.push(n);
        buf.push(
'</a>');
    }
    
    div1.innerHTML 
= buf.join('');

    t1.value 
= '耗时:' +  (new Date() - d);
}

function test2()
{
    
var d = new Date();
    
for (var n = 0; n < 1000; n ++)
    {
        
var e = document.createElement('a');
        e.href 
= '';
        e.innerText 
= '测试' + n;
        div2.appendChild(e);
    }
    
    t2.value 
= '耗时:' +  (new Date() - d);
}
</script>
</HTML>

 

 经测试发现:

  1. 在创建的对象较少(0-大约10左右)时,innerHTML和createElement效率差不多,测试值悠忽不定
  2. 在创建对象多于20时,innerHTML要比createElement效率高很多,平均测试差不多createElement耗时是innerHTML的两倍。

总结:其实效率也在于编写的代码,在知道可用的API的效率后,怎么编写代码也是非常重要的,否则应由的执行效率不能体现出来,就如上面从网上搜到的那些代码,得出一个与事实相悖的结论。

 

分享到:
评论
1 楼 447661376 2012-12-01  
关键在于createElement是可以得到创建的对象的,可以方便的操作,而且不需要固定id,但是innerHTML创建的就没法直接操作

相关推荐

    Javascript createElement和innerHTML增加页面元素的性能对比

    `createElement` 和 `innerHTML` 都是JavaScript中用于在页面上添加元素的常见方法,但它们在性能上有显著区别。 首先,`innerHTML` 属性允许我们将HTML字符串直接插入到指定元素中,从而创建或修改元素的内容。...

    javascript动态生成页面元素

    本文将深入探讨如何利用JavaScript动态生成HTML页面元素,包括使用innerHTML属性和DOM(Document Object Model)方法两种主要方式,以及在不同浏览器环境下的兼容性问题。 ### 1. 使用innerHTML属性 `innerHTML`...

    IE6/7/8中使用innerHTML清空元素,其子元素也被清空

    4. **避免不必要的innerHTML操作**:在可能的情况下,减少对`innerHTML`的依赖,转而使用DOM操作API,如`createElement`、`appendChild`和`removeChild`等,可以更好地控制DOM树的结构,避免这类问题。 5. **条件...

    关于在innerHTML中JS不执行的问题

    1. **使用`document.createElement`和`element.appendChild`**:这种方法创建和操作DOM元素是安全的,因为它不会直接解析HTML字符串。例如,如果你有`&lt;script&gt;`标签,可以创建一个新的`script`元素,然后设置其`src`...

    javaScript动态添加Li元素的实例

    在给定的文件内容中,包含了两种主要的技术实现:使用innerHTML和使用createElement。下面将对这两种方法进行详细解读,并解释相关的知识点。 首先,来看使用innerHTML的方法。innerHTML属性允许我们通过JavaScript...

    JavaScript客户端验证和页面特效制作

    2. **添加和删除元素**:`createElement`用于创建新元素,`appendChild`和`removeChild`分别用于添加和移除元素。 3. **修改元素内容**:`innerHTML`属性用于更改元素的HTML内容,`textContent`用于更改纯文本内容...

    innerHTML_outerHTML.rar_javascript

    在JavaScript编程语言中,`innerHTML` 和 `outerHTML` 是两个非常重要的属性,它们用于处理HTML元素的内容。本文将深入探讨这两个属性的概念、用途以及它们之间的区别。 `innerHTML` 属性: `innerHTML` 用于获取或...

    头歌教学实践平台 Web前端开发基础 JavaScript学习手册十四:HTML DOM-文档元素的操作(二)

    这篇教程——"JavaScript学习手册十四:HTML DOM-文档元素的操作(二)"深入探讨了如何使用JavaScript来操纵HTML文档中的元素,进一步提升网页动态性和交互性。 DOM是HTML和XML文档的一种结构化表示,它将网页内容...

    解决ajax返回innerHTML中javascript不能运行问题

    如果返回的值仅仅是文本类数据,不会影响模板页面的功能,但是如果返回的数据包括 JavaScript,那么直接 `innerHTML` 到模板页的这段脚本是不会被运行的。原因在于浏览器只在显示模板时才解析 JavaScript,而使用 ...

    javascript中createElement的两种创建方式

    JavaScript 中的 `createElement` 方法是 DOM (文档对象模型) 的一个核心功能,它允许开发者动态地创建 HTML 元素,并将其添加到网页文档中。本文将介绍 `createElement` 方法的两种不同创建方式,这两种方式各有其...

    javascript动态增加文本框

    在JavaScript编程中,动态增加文本框是一项常见的交互功能,它允许用户在页面上根据需要添加额外的输入元素,而无需离开当前页面或进行页面刷新。这个功能常用于表单提交、数据输入等场景,比如创建多行文本输入、...

    html动态增加和删除元素

    在实际应用中,动态增加和删除元素通常与数据绑定、Ajax异步请求、以及各种前端框架(如React、Vue、Angular)结合使用。这些框架提供更高级别的抽象,使得操作DOM更加简便,同时提高了性能和可维护性。 总结,HTML...

    js动态的添加元素例如表格1

    在上面的代码中,我们首先获取了 id 为 "myTable" 的表格元素,然后使用 createElement 方法创建了一个新的表格行和表格单元格元素。最后,我们使用 appendChild 方法将新创建的元素添加到表格中。 在使用 ...

    【第七章】JavaScript【Script标签与访问HTML页面(1)】

    【第七章】JavaScript【Script标签与访问HTML页面(1)】是关于JavaScript编程的一个章节,主要探讨了如何在HTML文档中使用Script标签以及JavaScript如何与HTML页面进行交互。这一主题对于理解和开发动态网页至关重要...

    使用javaScript增强交互效果

    在单页应用(SPA)中,JavaScript还可以处理页面路由,实现不同视图间的切换,如使用History API和hashchange事件: ```javascript window.addEventListener('hashchange', function() { var route = window....

    JavaScript实现增加和查询

    这可以通过`document.createElement()`创建新元素,`innerHTML`或`textContent`设置元素内容,以及`appendChild()`或`insertBefore()`来添加到现有结构中。删除商品则是找到相应的元素并使用`removeChild()`移除。 ...

    Javascript操作XML和HTML

    JavaScript是一种广泛应用于网页和网络应用的编程语言,它在客户端运行,无需服务器支持即可与用户交互,处理数据和控制页面动态行为。XML(Extensible Markup Language)和HTML(Hypertext Markup Language)则是两...

    JavaScript动态改变HTML页面元素例如添加或删除

    除了这些基本操作,JavaScript还可以用来改变元素的属性(如ID、class、style等)、内容(使用`innerHTML`或`textContent`属性)、事件监听(使用`addEventListener`或`attachEvent`)等。例如,可以使用`element....

    html与javascript简单例子

    例如,我们可以使用`document.createElement()`创建新的元素,`appendChild()`将元素添加到父元素,以及`innerHTML`属性改变元素的内容。 5. 事件处理: JavaScript通过事件监听来响应用户的操作。常见的事件包括`...

Global site tag (gtag.js) - Google Analytics