Chrome中的并发DOM节点修改?

时间:2012-06-10 18:40:02

标签: javascript css dom google-chrome dom-node

我正在尝试以递归方式将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(缺少更好的词),但这可能只是迷信。如果不是这样,我会假设锁定在节点级别。但同样,完全迷信。我在这个问题上在一个无事实的环境中运作。如果你有任何指示,我会非常感激。

1 个答案:

答案 0 :(得分:1)

首先,DOM被指定为不是线程安全的,因此您几乎没有机会同时应用这些属性。此外,javascript不是并行的,所以要并行执行这些任务,你必须使用WebWorker,它不能原样访问DOM,唉,不是线程安全的。

其次,为什么不在文档中创建样式表,并使用insertRule附加新的动态创建的规则,让浏览器的渲染引擎为您完成工作?