0

CSSStyleDeclarationドキュメントの innerHTML の各ノードにオブジェクトを再帰的に再適用しようとしています。たとえば、window.getComputedStyle(document.getElementsByTagName("a")[0])このページで呼び出すと、返されるハッシュには約 650 の異なるプロパティがあります。ドキュメントの innerHTML に 1000 個のノードがあるとします。innerHTML をループして各CSSStyleDeclarationハッシュにスタイルを適用すると、 node.style.setProperty(key, value). ただし、ループを繰り返すことで、各ノードを 1 つずつ実行しています。代わりに、このループを実行する代わりに、DOM に対して一度に 1000 回の呼び出しを行う方がはるかに効率的です。問題は、これが Chrome で可能である場合、その方法がわかりません。

私の疑いでは、Chrome は DOM 全体に GIL (より適切な言葉がないため) を持っていますが、これは単なる迷信かもしれません。そうでない場合は、ロックがノードレベルにあると思います。しかし、これも完全な迷信です。私はこれについて事実のない環境で活動しています。ご指摘がありましたら、よろしくお願いします。

4

1 に答える 1

1

まず、DOM はスレッドセーフではないと指定されているため、これらのプロパティを同時に適用できる可能性はほとんどありません。その上、javascript は並列ではないため、これらのタスクを並列で実行するには WebWorker を使用する必要があります。WebWorker はそのままでは DOM にアクセスできず、残念ながらスレッドセーフではありません。

次に、ドキュメント内にスタイルシートを作成し、insertRuleを使用して新しい動的に作成されたルールを追加し、ブラウザーのレンダリング エンジンに作業を任せてみませんか?

于 2012-06-10T18:52:30.640 に答える