javascript - Chrome 中的并发 DOM 节点修改?

标签 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(找不到更好的词),但这可能只是迷信。如果不是那样,我会假设锁定在节点级别。但同样,完全迷信。我在一个没有事实的环境中操作这个。如果您有任何指示,我将不胜感激。

最佳答案

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

其次,为什么不在文档中创建一个样式表,然后使用 insertRule附加一个新的、动态创建的规则,并让浏览器的呈现引擎为您完成这项工作?

关于javascript - Chrome 中的并发 DOM 节点修改?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10971331/

相关文章:

javascript - 使用 Ember.js 构建搜索框搜索

javascript - 缩放 'magnifying' div 下的任何类型的内容

javascript - 使用 jQuery 基于查询字符串自动完成字段

javascript - 更改标签颜色

css - 为什么是:last-child doesn't work when we have more elements inside?

javascript - 全局 JSON 变量

javascript - 如何在没有服务器组件的情况下使用 Angular-fullstack?

html - 文本从 Bootstrap 4 行溢出

javascript - 在使用 DOM/js/css 时隐藏/显示 div 时出现问题

javascript - 使用 JavaScript 修改 "value"输入的 "text"属性不起作用