Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/css/39.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Chrome中的并发DOM节点修改?_Javascript_Css_Dom_Google Chrome_Dom Node - Fatal编程技术网

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用于将新规则插入样式表。新规则现在成为级联的一部分。
取决于您的用例,
!重要信息
标志可能有用:)