假设我正在使用jQuery循环并对现有的网页元素执行一些操作。要进行多项更改,集合中的元素数量至少有些大,元素结构有些复杂。
假设我将所有元素都放到同一个jQuery对象中,使用jQuery的.clone(或.detach)方法创建一个“虚构”副本来处理,删除当前元素然后重新插入会更快吗?改变后的副本进入DOM?
...或者这没有什么区别 - 因为实时DOM元素操作速度和非DOM元素一样快?
答案 0 :(得分:0)
是,实际上,虽然您的里程可能会有所不同。
当元素可见时,操作将导致浏览器重绘页面。许多重绘可能会对性能造成重大影响。
当一个元素不可见时,不会触发重绘。
质量元素克隆可能相当昂贵,所以如果可能的话,我会避免这样做。
答案 1 :(得分:0)
您可以克隆该对象或创建新的文档片段。对该新对象进行更改并将其替换为DOM: https://developer.mozilla.org/en-US/docs/Web/API/Node.cloneNode https://developer.mozilla.org/en-US/docs/Web/API/document.createDocumentFragment
处理不属于DOM的对象不会触发任何绘制/回流。 如果性能是一个问题,请不要使用jQuery,使用普通的旧Javascript,因为cloneNode和createDocumentFragment都得到了很好的支持。