我正在尝试以递归方式将 CSSStyleDeclaration
对象重新应用到我文档的 innerHTML 中的每个节点。例如,如果您在此页面上调用 window.getComputedStyle(document.getElementsByTagName("a")[0])
,返回的散列中大约有 650 个不同的属性。假设我的文档的 innerHTML 中有 1000 个节点。当我循环遍历 innerHTML 并在每个 CSSStyleDeclaration
哈希中应用样式时,即对 node.style.setProperty(key, value)
进行了 650,000 次调用。但是,通过循环迭代,我正在一个接一个地处理每个节点。相反,一次对 DOM 进行 1000 次调用而不是执行此循环会更有效率。问题是,如果这在 Chrome 中可行,我不知道该怎么做。
我怀疑 Chrome 在整个 DOM 上都有一个 GIL(找不到更好的词),但这可能只是迷信。如果不是那样,我会假设锁定在节点级别。但同样,完全迷信。我在一个没有事实的环境中操作这个。如果您有任何指示,我将不胜感激。
最佳答案
首先,DOM 被指定为非线程安全的,因此您几乎不可能同时应用这些属性。此外,javascript 不是并行的,因此要并行执行这些任务,您必须使用 WebWorker,它不能按原样访问 DOM,唉,不是线程安全的。
其次,为什么不在文档中创建一个样式表,然后使用 insertRule附加一个新的、动态创建的规则,并让浏览器的呈现引擎为您完成这项工作?
关于javascript - Chrome 中的并发 DOM 节点修改?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10971331/