使用Chrome开发者工具中的时间轴,我使用以下代码通过 innerHTML 和 appendChild 方法记录事件:
<!DOCTYPE html>
<html>
<head>
<script>
function testInnerHTML(){
var wrap = document.getElementById('wrapper');
wrap.innerHTML = "test";
}
function testAppendChild(){
var wrap = document.getElementById('wrapper');
wrap.appendChild(document.createTextNode("test"));
}
</script>
</head>
<body>
<input type="button" value="innerHTML" onClick="testInnerHTML();"/>
<input type="button" value="appendChild" onClick="testAppendChild();"/>
<div id="wrapper"></div>
</body>
</html>
我发现:
- innerHTML触发了一个布局事件
![innertHTML triggers layout event](https://istack.dev59.com/ctbj8.webp)
![appendChild triggers layout and recalculate style events](https://istack.dev59.com/PtiTY.webp)
我正在考虑使用一个带有文档片段的appendChild来避免innerHTML涉及到的解析。但是这种方式节省的时间却被重新计算样式所消耗...
我正在使用Chrome版本23.0.1271.64 m
你有什么想法为什么会出现这种情况吗? 我应该添加一些东西到我附加的节点上,以帮助浏览器不触发重新计算样式事件吗?
PS:如果你想知道双重解析事件的原因,请参考为什么在Chrome上点击设置innerHTML会触发两个解析事件?