[解決済み] React.jsのVirtual DOMのようにShadow DOMは速いのか?
質問
Shadow DOMを実装すると、Reactで使われているvirtual DOMのように高速化されるのでしょうか?
どのように解決するのですか?
仮想DOM
DOM への変更は通常ページの再レンダリングを引き起こすため、パフォーマンス的に高くつくものです。仮想 DOM はまた、一度に適用される複数の変更を収集することを可能にします。そのため、すべての変更が再レンダリングを引き起こすのではなく、一連の変更が DOM に適用された後に一度だけ再レンダリングが行われます。
シャドウ DOM
Shadow DOM は、主に実装のカプセル化についてです。単一のカスタム要素で、多かれ少なかれ複雑なDOMと組み合わせた複雑なロジックを実装することができます。任意の複雑さのウェブアプリケーション全体を、インポートおよび
<body><my-app></my-app>
のように内部表現をシャドウ DOM に隠蔽するカスタム要素として実装することもできます。
<date-picker></date-picker>
.
スタイルのカプセル化 Shadow DOM は、たとえば、使用している CSS やコンポーネント ライブラリがセレクタを変更し、同じ CSS クラス名を使用する他の要素に適用されたために、設計者が意図していない要素に誤ってスタイルが適用されるのを防ぐことでもあります。コンポーネントに追加されたスタイルはそのコンポーネントにスコープされ、スタイルのブリードアウトまたはブリードインは防止されます。
シャドウDOMとパフォーマンス
シャドウ DOM はそもそもパフォーマンスに関するものではないにもかかわらず、それはまた、パフォーマンスに影響を及ぼします。スタイルはスコープされるので、ブラウザは、ページ全体を再レンダリングするのではなく、そのようなコンポーネントの領域に再レンダリングを制限することができるページの限られた領域 (カスタム要素のシャドウ DOM) にのみ影響するいくつかの変更についての仮定を行うことができます。
このような理由で
>>>
,
/deep/
そして
::shadow
CSS コンビネーターは、シャドウ DOM 境界を越えてスタイルを適用することができましたが、非推奨となり、Chrome からすぐに削除される予定です(他のブラウザでは AFAIK はそれらを持ちませんでした)。これらの組み合わせ要素の単なる存在は、前の段落で言及された種類の最適化を防止します。
Angular2 は、両方の世界の長所を利用しています。
一方的なデータフローを使用し、モデルに対してのみ変更検知を行います。変更を検出した場合、バインディングを更新することでDOMを更新させ、構造的な指示として
*ngFor
,
*ngIf
はDOMを更新します。したがって、DOMはモデルが実際に変更されたときのみ更新されます。
Angular2はシャドーDOMを使用します(
ViewEncapsulation.Native
を使用して、ブラウザが提供するスタイルカプセル化機能を利用するか、または(現在のデフォルトでは)コンポーネントに追加されたスタイルを書き換えることによってスタイルカプセル化をエミュレートするだけで、ネイティブのシャドウ DOM および CSS 変数(動的なグローバルスタイルの変更用)が広く利用可能になるまでの回避策になります。
関連
-
[解決済み] DOM要素とは何ですか?
-
[解決済み] DOM要素とは何ですか?
-
[解決済み] どのDOM要素にフォーカスがあるかを調べるには?
-
[解決済み] DOM要素が現在のビューポートで表示されているかどうかを確認するにはどうすればよいですか?
-
[解決済み] JavaScript で DOM ノードのすべての子要素を削除する
-
[解決済み] JavaScriptやデバッグでDOMノード上のイベントリスナーを見つけるには?
-
[解決済み] 内蔵DOMメソッドやPrototypeを使ってHTML文字列から新しいDOM要素を作成する
-
[解決済み] XPathで "not "を使うには?
-
[解決済み] Chrome Developer ToolsでXPathやCSSセレクタを使用してDOM要素を検索するには?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン