为什么星号金字塔JSPerf测试的测试用例2需要这么长时间?

时间:2013-01-27 17:01:57

标签: javascript performance

var elemText = document.getElementById("insert");
for (var k = 1; k <= 4; k++) {
  for (var j = 1; j <= k; j++) {
    elemText.innerHTML += ('*');
  };
  elemText.innerHTML += ('<br>');
};

拆解:

document.getElementById("insert").innerHTML = "";

是否存在编码错误?是非常低效(我认为这不太可能是唯一的原因)?这与测试的设置方式有关吗?

1 个答案:

答案 0 :(得分:1)

  

是否存在编码错误?

是。您忘记在测试#2中重新初始化<div>。您需要清空它,就像在测试#1中设置result = []一样。在拆卸中进行此操作是不够的,测试#2将在清除之前生成比测试#1更长的文本。

此外,您的测试用例的结果也不尽相同。由于您也希望在测试#1中输出<br />元素,因此您也需要在{1}}中使用innerHTML元素。您当前的代码确实将<br>输出为文本。

Improved test setup

  

是非常低效的吗?

是。使用innerHTML效率很低 - 每次分配时都需要HTML解析器,并且您经常这样做。此外,由于您使用+=,因此每次都需要序列化DOM。