【问题标题】:Element.innerHTML is too expensive to run, need alternativesElement.innerHTML 运行成本太高,需要替代方案
【发布时间】:2020-06-16 14:46:12
【问题描述】:

最近我在分析我的 JS 代码时遇到了一个问题,发现代码中有一个非常小的函数,需要 3-10 毫秒。经过调查,我发现函数Element.innerHTML是这个函数内部调用1-2次时几乎占用了所有CPU时间的函数。

例如:element1.innerHTML = "<span>text</span>"

我正在寻找减少 CPU 时间的替代方法。

【问题讨论】:

    标签: performance innerhtml


    【解决方案1】:

    如果您可以忽略使用 Element.innerHTML,请这样做。它非常昂贵。相反,使用document.createElementElement.appendChild 代替它。

    我将此代码element1.innerHTML = "<span>text</span>" 转换为此代码:

    var element2 = doc.createElement('span');
    element2.innerText = "text";
    element1.appendChild(element2);
    

    当我在这两个地方进行此更改时,我将每个 innerHTML 使用的 CPU 从 1.5 毫秒降至 0.01 毫秒,在大多数情况下甚至为 0 毫秒。

    然后我需要在旧代码中存在的不同位置添加 NO_BREAK 符号(“ ”),但我得到的所有建议都是使用 innerHTML 作为这个符号,这将增加我想要的 CPU 时间防止。

    解决方法是:

    element.appendChild(document.createTextNode('\u00A0'))
    

    没有innerHTML 也会产生同样的效果。即使使用Element.insertAdjacentHTML 也是解析HTML 并且会占用更多CPU 时间,所以我也尝试忽略它的使用。

    希望对你有帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-08-15
      • 2014-09-30
      • 2019-09-13
      • 1970-01-01
      相关资源
      最近更新 更多