我正在尝试以递归方式将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(缺少更好的词),但这可能只是迷信。如果不是这样,我会假设锁定在节点级别。但同样,完全迷信。我在这个问题上在一个无事实的环境中运作。如果你有任何指示,我会非常感激。
答案 0 :(得分:1)
首先,DOM被指定为不是线程安全的,因此您几乎没有机会同时应用这些属性。此外,javascript不是并行的,所以要并行执行这些任务,你必须使用WebWorker,它不能原样访问DOM,唉,不是线程安全的。
其次,为什么不在文档中创建样式表,并使用insertRule附加新的动态创建的规则,让浏览器的渲染引擎为您完成工作?