有几种方法。所有这些的主要目标是您最终导致一次 - 或至少尽可能少 - 回流/重绘。
非 DOM 元素
您可以在不附加到 DOM 的情况下使用元素,然后在所有内容设置完成后将所有内容附加在一起。
唯一的问题是如果您的代码需要引用偏移尺寸,因为尚未在 DOM 中的元素没有任何元素。
var container = document.createElement('section'); //not in the DOM yet
//do some extensive work here to prepare the doc
document.body.appendChild(container); //now we go to the DOM, causing a single re-paint
文档片段
这个主题的一个更正式且可能改进的变体是文档片段,它带来了性能优势(显然)。它们实际上是第二个没有显示的独立 DOM。
细绳
可能所有这些中最快的方法是将您的文档构建为字符串。显而易见的含义是您不能在其上使用 DOM 方法,但如果您对字符串处理和 REGEX'ing(当然在 HTML 上不理想)感到满意,则值得考虑。
最后,如果速度至关重要,并且您有大量的计算或字符串处理工作要做,那么您可能想要利用网络工作者。这些不能直接与 DOM 对话,但您可以将任务外包给它们,而且至关重要的是,它们在单独的线程上异步工作。