Javascript 创建DOM元素:createElement、add属性等和创建它们的字符串然后追加它们之间的区别

Javascript 创建DOM元素:createElement、add属性等和创建它们的字符串然后追加它们之间的区别,javascript,html,css,performance,dom,Javascript,Html,Css,Performance,Dom,我想知道这两种用于创建HTML元素的技术之间的区别。我看不出有什么不同。我只是想知道在任何方面(性能或其他方面)是否存在差异或更多差异 使用JS内置方法的第一种技术- var el1=document.createElement('div'); el1.innerHTML='Element Div 1'; var el2=document.createElement('span'); el2.innerHTML='-Span元素'; el2.classList.add('red'); 文件.正

我想知道这两种用于创建HTML元素的技术之间的区别。我看不出有什么不同。我只是想知道在任何方面(性能或其他方面)是否存在差异或更多差异

使用JS内置方法的第一种技术-

var el1=document.createElement('div');
el1.innerHTML='Element Div 1';
var el2=document.createElement('span');
el2.innerHTML='-Span元素';
el2.classList.add('red');
文件.正文.附件(el1);
el1.附肢儿童(el2);
el1.id=“div”
.red{
颜色:红色;
字体大小:13px;
}
#div{
字号:18px;
颜色:白肋木;

}
第二种情况通常不仅更短,而且更快

执行此操作时:

document.body.innerHTML = '<div id="div">Element Div 1<span class="red"> - Span Element</span></div>';
document.body.innerHTML='Element Div 1-Span Element';
浏览器在单个事务中不填充DOM—它确切地知道在多个插入之间不会发生任何事情

在第一种情况下(“手动”DOM填充),每行浏览器应确保DOM处于一致状态,并至少触发DOM突变事件


是的,第二种情况需要解析,但所有浏览器都有非常有效的HTML解析器。

第二种情况通常不仅更短,而且更快

执行此操作时:

document.body.innerHTML = '<div id="div">Element Div 1<span class="red"> - Span Element</span></div>';
document.body.innerHTML='Element Div 1-Span Element';
浏览器在单个事务中不填充DOM—它确切地知道在多个插入之间不会发生任何事情

在第一种情况下(“手动”DOM填充),每行浏览器应确保DOM处于一致状态,并至少触发DOM突变事件


是的,第二种情况需要解析,但所有浏览器都有非常有效的HTML解析器。

第二种情况通常不仅更短,而且更快

执行此操作时:

document.body.innerHTML = '<div id="div">Element Div 1<span class="red"> - Span Element</span></div>';
document.body.innerHTML='Element Div 1-Span Element';
浏览器在单个事务中不填充DOM—它确切地知道在多个插入之间不会发生任何事情

在第一种情况下(“手动”DOM填充),每行浏览器应确保DOM处于一致状态,并至少触发DOM突变事件


是的,第二种情况需要解析,但所有浏览器都有非常有效的HTML解析器。

第二种情况通常不仅更短,而且更快

执行此操作时:

document.body.innerHTML = '<div id="div">Element Div 1<span class="red"> - Span Element</span></div>';
document.body.innerHTML='Element Div 1-Span Element';
浏览器在单个事务中不填充DOM—它确切地知道在多个插入之间不会发生任何事情

在第一种情况下(“手动”DOM填充),每行浏览器应确保DOM处于一致状态,并至少触发DOM突变事件



是的,第二种情况需要解析,但所有浏览器都有非常有效的HTML解析器。

@Saar不仅涉及
innerHTML
createElement
,还涉及我使用的不同方法-
appendChild
classList.add
。。第一种技术与第二种技术相比,性能没有太大区别,但使用innerHTML、浏览器解析字符串(速度很快)并以本机方式创建元素。当您使用createElement时,javascript函数调用这些函数,这是额外的开销(但速度也很快),因此据我所知,它几乎可以忽略不计。有一个名为domly的框架使用createElement,它声称比innerHTML快一点,但我认为这是因为它们首先运行基准domly,所以其他人点击了GC。@如果我创建
id
classList,你会怎么办。add
使用内置JS方法添加类,就像在第一种情况下一样,而在另一种情况下是在字符串中创建的。这取决于你将从javascript添加多少类,如果你运行一百万次,可能会有所不同,但是大多数正常的用例并没有太大的不同。@Saar不仅仅是关于
innerHTML
createElement
,还有我使用的不同方法-
appendChild
classList.add
。。第一种技术与第二种技术相比,性能没有太大区别,但使用innerHTML、浏览器解析字符串(速度很快)并以本机方式创建元素。当您使用createElement时,javascript函数调用这些函数,这是额外的开销(但速度也很快),因此据我所知,它几乎可以忽略不计。有一个名为domly的框架使用createElement,它声称比innerHTML快一点,但我认为这是因为它们首先运行基准domly,所以其他人点击了GC。@如果我创建
id
classList,你会怎么办。add
使用内置JS方法添加类,就像在第一种情况下一样,而在另一种情况下是在字符串中创建的。这取决于你将从javascript添加多少类,如果你运行一百万次,可能会有所不同,但是大多数正常的用例并没有太大的不同。@Saar不仅仅是关于
innerHTML
createElement
,还有我使用的不同方法-
appendChild
classList.add
。。第一种技术与第二种技术相比,性能没有太大区别,但使用innerHTML、浏览器解析字符串(速度很快)并以本机方式创建元素。当您使用createElement时,javascript函数调用这些函数,这是额外的开销(但速度也很快),因此据我所知,它几乎可以忽略不计。有一个名为domly的框架使用createElement,它声称比innerHTML快一点,但我认为这是因为它们首先运行基准domly,所以其他人点击了GC。@如果我创建
id
classList,你会怎么办。add
使用内置JS方法添加类,就像在第一种情况下一样,而在另一种情况下是在字符串中创建的。这取决于你将从javascript添加多少类,如果你运行一百万次,可能会有所不同,但是大多数正常的用例并没有太大的不同。