Javascript Chrome中的并发DOM节点修改?
我试图递归地将Javascript Chrome中的并发DOM节点修改?,javascript,css,dom,google-chrome,dom-node,Javascript,Css,Dom,Google Chrome,Dom Node,我试图递归地将CSSStyleDeclaration对象重新应用到文档的innerHTML中的每个节点。例如,如果在此页面上调用window.getComputedStyle(document.getElementsByTagName(“a”)[0]),则返回的哈希中大约有650个不同的属性。假设我在文档的innerHTML中有1000个节点。当我在innerHTML中循环并应用每个CSSStyleDeclarationhash中的样式时,即650000次调用node.style.setProp
CSSStyleDeclaration
对象重新应用到文档的innerHTML中的每个节点。例如,如果在此页面上调用window.getComputedStyle(document.getElementsByTagName(“a”)[0])
,则返回的哈希中大约有650个不同的属性。假设我在文档的innerHTML中有1000个节点。当我在innerHTML中循环并应用每个CSSStyleDeclaration
hash中的样式时,即650000次调用node.style.setProperty(key,value)
。然而,通过循环迭代,我一个接一个地处理每个节点。相反,一次对DOM进行1000次调用要比执行此循环有效得多。问题是,如果这在Chrome中是可能的,我不知道怎么做
我怀疑Chrome在整个DOM上有一个GIL(因为没有更好的词),但这可能只是迷信。如果不是这样,我会假设锁位于节点级别。但再一次,完全是迷信。我在一个不真实的环境中进行这项工作。如果您有任何建议,我将不胜感激。首先,DOM被指定为非线程安全的,因此您几乎不可能同时应用这些属性。此外,javascript不是并行的,所以要并行执行这些任务,您必须使用WebWorker,它不能访问DOM,唉,这不是线程安全的
其次,为什么不在文档中创建一个样式表,并使用来附加一个新的、动态创建的规则,让浏览器的呈现引擎为您完成这项工作?您是否可以执行类似于
node.style=firstLinkStyle代码>?不确定这是否有效。因为对于这个应用程序,我必须严格执行cascade和insertRule,然后才能理解计算值。来自DOM Level 2 CSS规范:InsertRule用于将新规则插入样式表。新规则现在成为级联的一部分。
取决于您的用例,!重要信息
标志可能有用:)