我的问题分为两部分:
问题的第1部分:
测试一个:
t1 = new Date().getTime();
for (i=0; i<205; i++) {
document.getElementById("divTest").innerHTML = sText;
}
t2 = new Date().getTime();
alert(t2-t1);
结果:16ms
测试b;
document.getElementById("divTest").innerHTML = sText;
t1 = new Date().getTime();
for (i=0; i<205; i++) {
if ( document.getElementById("divTest").scrollHeight > document.getElementById("divTest").clientHeight ) {
j++;
}
}
t2 = new Date().getTime();
alert(t2-t1);
结果:2ms
所以理论上,如果我们将两者都放在循环中,我们应该绕过:18 ms,但测试 c 证明我错了:
测试c:
t1 = new Date().getTime();
for (i=0; i<205; i++) {
document.getElementById("divTest").innerHTML = sText;
if ( document.getElementById("divTest").scrollHeight > document.getElementById("divTest").clientHeight ) {
j++;
}
}
t2 = new Date().getTime();
alert(t2-t1);
结果:240ms
惊人的 240 毫秒!!!浏览器之间的行为是一致的。为什么会这样?
问题的第 2 部分:
自从
document.getElementById("divTest").innerHTML = sText;
通常很慢,我在这里找到了一种更快的方法:http: //blog.stevenlevithan.com/archives/faster-than-innerhtml,因此最终实现(测试 c)变为:
t1 = new Date().getTime();
for (i=0; i<205; i++) {
el = document.getElementById("divTest").cloneNode(false);
el.innerHTML = sText;
document.getElementById("divTest").parentNode.replaceChild(el, document.getElementById("divTest"));
if (el.scrollHeight > el.clientHeight) {
j++;
}
}
t2 = new Date().getTime();
alert(t2-t1);
结果为 105 毫秒,优于 240 毫秒
但是我想知道是否通过 parentnode 或其他一些 dom 操作方式我可以获得访问 scrollheight 和 clientheight 的更快方法,就像我用直接 DOM 操作替换 innerHTML 一样?
提前致谢!