国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

React仮想DOMの使い方

May 31, 2018 pm 02:22 PM
react 使用 バーチャル

今回はReact仮想DOMの使い方と、React仮想DOMを使用する際の注意點(diǎn)を紹介します。実際の事例を見(jiàn)てみましょう。

Web開(kāi)発では、データの変更をリアルタイムにUIに反映させる必要がありますが、その際にDOMの操作が複雑で頻繁に行われることがパフォーマンスのボトルネックとなることが多いです。仮想 DOM (Virtual DOM) メカニズムを?qū)毪筏蓼埂?

1. 仮想 DOM とは何ですか?

React では、レンダリングの実行結(jié)果は実際の DOM ノードではなく、仮想 DOM と呼ばれる軽量の JavaScript オブジェクト になります。

仮想 DOM は、バッチ処理と効率的な Diff アルゴリズムを備えた React のハイライトです。これにより、パフォーマンスの問(wèn)題を気にすることなく、いつでもページ全體を「更新」することができ、仮想 DOM により、インターフェイスの実際に変更された部分に対してのみ実際の DOM 操作が実行されることが保証されます。実際の開(kāi)発では、基本的に仮想DOMの動(dòng)作を気にする必要はありませんが、その動(dòng)作メカニズムを理解することは、Reactコンポーネントのライフサイクルをより深く理解するのに役立つだけでなく、さらなる最適化にも大いに役立ちます。反応プログラム。

2. 仮想 DOM VS 直接操作するネイティブ DOM?

仮想 DOM がない場(chǎng)合は、innerHTML を直接リセットしてください。この操作は、大きなリスト內(nèi)のすべてのデータが変更された場(chǎng)合には合理的ですが、データが 1 行だけ変更された場(chǎng)合には、innerHTML 全體もリセットする必要があり、明らかに無(wú)駄が多くなります。

innerHTML と仮想 DOM の再描畫(huà)プロセスを次のように比較します。

innerHTML: HTML 文字列のレンダリング + すべての DOM 要素の再作成

仮想 DOM: 仮想 DOM のレンダリング + diff + 必要な DOM 更新

DOM 操作と比較すると、js の計(jì)算はとても安い。仮想 DOM レンダリング + diff は、HTML 文字列のレンダリングよりも明らかに遅いですが、それでも純粋な JS レベルの計(jì)算であり、後続の DOM 操作よりもはるかに安価です。もちろん、誰(shuí)かが検証を行っており、React のパフォーマンスは実際の DOM を直接操作するほど良くないと言っています。 コードは次のとおりです。

function?Raw()?{
??var?data?=?_buildData(),
????html?=?"";
??...
??for(var?i=0;?i<data.length; i++) {
    var render = template;
    render = render.replace("{{className}}", "");
    render = render.replace("{{label}}", data[i].label);
    html += render;
  }
  ...
  container.innerHTML = html;
  ...
}

このテスト ケースでは、1000 個(gè)のタグを含む String が構(gòu)築されて追加されています。 DOM ツリーでは、DOM 操作が実行されただけです。ただし、実際の開(kāi)発プロセスでは、これらの 1,000 個(gè)の要素の更新が 20 個(gè)の論理ブロックに分散される可能性があり、各論理ブロックには 50 個(gè)の要素が含まれており、ページを更新する必要がある場(chǎng)合、上記のコードはおよそ DOM ツリーを更新します。以下のような形式になります:

function Raw() {
  var data = _buildData(), 
    html = ""; 
  ... 
  for(var i=0; i<data.length; i++) { 
    var render = template; 
    render = render.replace("{{className}}", ""); 
    render = render.replace("{{label}}", data[i].label); 
    html += render; 
    if(!(i % 50)) {
      container.innerHTML = html;
    }
  } 
  ... 
}

こうしてみると、ReactのパフォーマンスはネイティブDOM操作よりもはるかに優(yōu)れています。

さらに、DOM は Javascript にはまったく屬していません (JavaScript エンジンにも存在しません)。 Javascript は実際には非常に獨(dú)立したエンジンです。DOM は実際には、JavaScript が HTML ドキュメント を操作できるようにするブラウザーによって導(dǎo)入された API のセットです。ジャストインタイム コンパイルの時(shí)代では、DOM を呼び出すオーバーヘッドが非常に高くなります。 Virtual DOM の実行は完全に Javascript エンジン內(nèi)で行われ、そのようなオーバーヘッドはまったくありません。

React.js は、主に仮想 DOM のバッチ処理と diff により、ネイティブ DOM を直接操作するよりもパフォーマンスに大きな利點(diǎn)があります。バッチ処理では、すべての DOM 操作が収集され、実際の DOM に一度に送信されます。 diff アルゴリズムの時(shí)間計(jì)算量も、標(biāo)準(zhǔn) Diff アルゴリズムの O(n^3) から O(n) に削減されました。これについては次のブログ投稿に譲ります。

3. 仮想 DOM 対 MVVM?

React と比較すると、Angular、Knockout、Vue、Avalon などの他の MVVM フレームワークはすべて データ バインディング を使用します。ディレクティブ/バインディング オブジェクトを通じて、データの変更を監(jiān)視し、データが変更されたときに実際の DOM 要素への參照を保持します。変化します。 MVVM の変更チェックはデータ レベルで行われますが、React のチェックは DOM 構(gòu)造レベルで行われます。 MVVM のパフォーマンスは、変更検出の実裝原理によっても異なります。Angular のダーティ チェックでは、あらゆる変更の固定コストが O (ウォッチャー カウント) になります。Knockout/Vue/Avalon はすべて、js レベルと DOM レベルの両方で依存関係の収集を使用します。はい O(変更):

  1. ダーティチェック: スコープダイジェスト + 必要な DOM 更新

  2. 依存関係の収集: 依存関係を再収集 + 必要な DOM 更新

Angular の最も非効率な部分は、小さな変更でもウォッチャーの數(shù)に関連したパフォーマンス コストが発生することです。しかし!すべてのデータが変更されても、Angular は実際には影響を受けません。依存関係の収集では、初期化やデータ変更時(shí)に依存関係を再収集する必要がありますが、このコストは、少量の更新が行われる場(chǎng)合にはほとんど無(wú)視できますが、データ量が多い場(chǎng)合には一定の消費(fèi)が発生します。

MVVM がリストをレンダリングするとき、各行には獨(dú)自のデータ スコープがあるため、通常、各行には対応する ViewModel インスタンス、またはプロトタイプの継承を使用する少し軽い「スコープ」オブジェクトがありますが、代償もあります。したがって、ViewModel / スコープ インスタンスの作成は Virtual DOM よりもはるかに高価であるため、MVVM リスト レンダリングの初期化は React よりも遅くなることがほぼ保証されています。ここでのすべての MVVM 実裝に共通する問(wèn)題は、リスト レンダリングのデータ ソースが変更された場(chǎng)合、特にデータが新しいオブジェクトである場(chǎng)合に、作成済みの ViewModel インスタンスと DOM 要素を効果的に再利用する方法です。再利用の最適化を行わないと、データは「新しい」ため、MVVM は実際に以前のすべてのインスタンスを破棄し、すべてのインスタンスを再作成し、最後に再度レンダリングする必要があります。タイトルにリンクされている angular/knockout 実裝が比較的遅いのはこのためです。それに対して、Reactの変更チェックはDOM構(gòu)造レベルで行われるため、たとえ真新しいデータであっても、最終的な描畫(huà)結(jié)果が変わっていなければ無(wú)駄な作業(yè)をする必要がありません。

Angular と Vue はどちらもリスト再描畫(huà)のための最適化メカニズムを提供し、インスタンスと DOM 要素を効果的に再利用する方法をフレームワークに「ヒント」します。たとえば、データベース內(nèi)の同じオブジェクトは、2 つのフロントエンド API 呼び出しでは異なるオブジェクトになりますが、同じ uid を持ちます。この時(shí)點(diǎn)で、uid による追跡をプロンプトして、2 つのオブジェクトが実際には同じデータであることを Angular に知らせることができます。そうすれば、元のデータに対応するインスタンスと DOM 要素を再利用でき、変更された部分のみを更新する必要があります。または、$index で直接追跡して、配列內(nèi)の位置に基づいて直接再利用する「インプレース再利用」を?qū)g行することもできます。質(zhì)問(wèn)に示された例では、Angular 実裝が $index によってトラックを追加した場(chǎng)合、その後の再描畫(huà)は React よりもそれほど遅くなりません。 dbmonster テストでも、$index: dbmon による track を使用した後、Angular と Vue は React よりも高速です (Angular のデフォルト バージョンは最適化されていないことに注意してください。最適化されたバージョンは以下にあります)

パフォーマンスを比較するときは、初期バージョンと初期バージョンを區(qū)別する必要があります。レンダリングには、少量のデータ更新、大量のデータ更新などさまざまな機(jī)會(huì)があります。仮想 DOM、ダーティ チェック MVVM、データ収集 MVVM は、狀況に応じてパフォーマンスや最適化要件が異なります。小規(guī)模なデータ更新のパフォーマンスを向上させるために、Virtual DOM には shouldComponentUpdate や不変データなどの対象を絞った最適化も必要です。

  1. 初期レンダリング: 仮想 DOM > ダーティ チェック >= 依存関係収集

  2. 小規(guī)模データ更新: 仮想 DOM + 最適化 > 仮想 DOM なし最適化

  3. 大規(guī)模なデータ更新: ダーティ チェック + 最適化>= 依存関係の収集 + 最適化> 仮想 DOM (最適化できない/不要)>> MVVM は最適化なし

  4. (この段落は、 Zhihu 回答)

  5. 4. React 仮想 DOM についての誤解はありますか?

    React は、「React はネイティブ DOM 操作よりも速い」とは決して言っていません。 React は、手動(dòng)による最適化を行わなくても、適切なパフォーマンスを提供できることを保証します。

    React は基礎(chǔ)となる DOM 操作をマスクし、より宣言的な方法で目的を記述することができるため、コードの保守が容易になります。以下は Zhihu の回答に基づいています: フレームワークの DOM 操作層は、上位層 API とその実裝によって生成される可能性のある操作に対処する必要があるため、純粋な手動(dòng)操作よりも速く DOM 操作を最適化できるフレームワークはありません。普遍的でなければなりません。どのベンチマークでも、どのフレームワークよりも高速な手動(dòng)最適化を作成できますが、一體何が意味があるのでしょうか?実際のアプリケーションを構(gòu)築する際、あらゆる箇所を手動(dòng)で最適化しますか?保守性の理由から、これは明らかに不可能です。

    この記事の事例を読んだ後は、その方法を習(xí)得したと思います。さらに興味深い情報(bào)については、php 中國(guó)語(yǔ) Web サイトの他の関連記事に注目してください。

    推奨読書(shū):

    バックエンドコードを使用したWeChatミニプログラムへの寫(xiě)真アップロードの実裝

    WeChatミニプログラムへの寫(xiě)真アップロードの実際のケースの分析

    以上がReact仮想DOMの使い方の詳細(xì)內(nèi)容です。詳細(xì)については、PHP 中國(guó)語(yǔ) Web サイトの他の関連記事を參照してください。

このウェブサイトの聲明
この記事の內(nèi)容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰屬します。このサイトは、それに相當(dāng)する法的責(zé)任を負(fù)いません。盜作または侵害の疑いのあるコンテンツを見(jiàn)つけた場(chǎng)合は、admin@php.cn までご連絡(luò)ください。

ホットAIツール

Undress AI Tool

Undress AI Tool

脫衣畫(huà)像を無(wú)料で

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード寫(xiě)真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

寫(xiě)真から衣服を削除するオンライン AI ツール。

Clothoff.io

Clothoff.io

AI衣類(lèi)リムーバー

Video Face Swap

Video Face Swap

完全無(wú)料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡(jiǎn)単に交換できます。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無(wú)料のコードエディター

SublimeText3 中國(guó)語(yǔ)版

SublimeText3 中國(guó)語(yǔ)版

中國(guó)語(yǔ)版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強(qiáng)力な PHP 統(tǒng)合開(kāi)発環(huán)境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開(kāi)発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

Vue.js vs. React:パフォーマンスと効率の比較 Vue.js vs. React:パフォーマンスと効率の比較 Apr 28, 2025 am 12:12 AM

Vue.jsとReactにはそれぞれ獨(dú)自の利點(diǎn)があります。Vue.jsは小さなアプリケーションと迅速な発展に適していますが、Reactは大規(guī)模なアプリケーションと複雑な國(guó)家管理に適しています。 1.Vue.jsは、小さなアプリケーションに適したレスポンシブシステムを通じて自動(dòng)更新を?qū)g現(xiàn)します。 2.反応は、大規(guī)模で複雑なアプリケーションに適した仮想DOMおよびDIFFアルゴリズムを使用します。フレームワークを選択するときは、プロジェクトの要件とチームテクノロジースタックを検討する必要があります。

Netflix:React(またはその他のフレームワーク)の使用の調(diào)査 Netflix:React(またはその他のフレームワーク)の使用の調(diào)査 Apr 23, 2025 am 12:02 AM

Netflixは、Reactのコンポーネント設(shè)計(jì)と仮想DOMメカニズムが複雑なインターフェイスと頻繁な更新を効率的に処理できるため、ユーザーインターフェイスを構(gòu)築するためにReactを選択しました。 1)コンポーネントベースの設(shè)計(jì)により、Netflixはインターフェイスを管理可能なウィジェットに分解し、開(kāi)発効率とコード保守性を向上させることができます。 2)仮想DOMメカニズムは、DOM操作を最小化することにより、Netflixユーザーインターフェイスの滑らかさと高性能を保証します。

トップ10のデジタル通貨取引アプリプラットフォームは何ですか?上位10のデジタル通貨交換プラットフォーム トップ10のデジタル通貨取引アプリプラットフォームは何ですか?上位10のデジタル通貨交換プラットフォーム Apr 22, 2025 pm 02:54 PM

トップ10のデジタル通貨取引アプリプラットフォーム:1。OKX、2。Binance、3。Gate.io、4。Huobi、5。Coinbase、6。Kraken、7。Bitfinex、8。Kucoin、9。Bibit、10。BitStamp、これらのプラットフォームは、実生活の市場(chǎng)動(dòng)向、技術(shù)分析ツール、およびユーザーフリーズインターフェースを使用します。

CSSをReactに含めるにはどうすればよいですか? CSSをReactに含めるにはどうすればよいですか? May 26, 2025 am 12:01 AM

ReactにCSSを含める5つの方法があります。1。インラインスタイルを使用しますが、これは単純ですが、再利用とメンテナンスを助長(zhǎng)しません。 2。インポートを通じて実裝されているCSSファイルを使用します。これは、組織を助長(zhǎng)しますが、競(jìng)合につながる可能性があります。 3. cssmodulesを使用して、グローバルな競(jìng)合を回避しますが、構(gòu)成が必要です。 4. styledComponentsを使用して、JavaScriptを使用してスタイルを動(dòng)的に生成しますが、ライブラリへの依存が必要です。 5. SASS以下を使用して、より多くの機(jī)能を提供しますが、建設(shè)の複雑さを高めます。

Vue.jsとReactの未來(lái):傾向と予測(cè) Vue.jsとReactの未來(lái):傾向と予測(cè) May 09, 2025 am 12:12 AM

Vue.jsとReactの將來(lái)の傾向と予測(cè)は次のとおりです。1)Vue.jsはエンタープライズレベルのアプリケーションで広く使用され、サーバー側(cè)のレンダリングおよび靜的サイト生成でブレークスルーを行いました。 2)Reactは、サーバーコンポーネントとデータ収集で革新され、並行性モデルをさらに最適化します。

Vue.js vs. React:ユースケースとアプリケーション Vue.js vs. React:ユースケースとアプリケーション Apr 29, 2025 am 12:36 AM

VUE.JSは中小企業(yè)から中規(guī)模のプロジェクトに適していますが、Reactは大規(guī)模なプロジェクトや複雑なアプリケーションシナリオに適しています。 1)Vue.jsは使いやすく、迅速なプロトタイピングや小規(guī)模アプリケーションに適しています。 2)Reactは、複雑な州の管理とパフォーマンスの最適化を処理する上でより多くの利點(diǎn)があり、大規(guī)模なプロジェクトに適しています。

React and Bootstrap:ユーザーインターフェイス設(shè)計(jì)の強(qiáng)化 React and Bootstrap:ユーザーインターフェイス設(shè)計(jì)の強(qiáng)化 Apr 26, 2025 am 12:18 AM

ReactおよびBootstrapをシームレスに統(tǒng)合して、ユーザーインターフェイス設(shè)計(jì)を強(qiáng)化できます。 1)依存関係パッケージをインストール:NPMINSTALLBOOTSTRAPREACT-BOOTSTRAP。 2)CSSファイルをインポート:Import'BootStrap/DIST/CSS/BOOTSTRAP.MIN.CSS '。 3)ボタンやナビゲーションバーなどのブートストラップコンポーネントを使用します。この組み合わせにより、開(kāi)発者はReactの柔軟性とBootstrapのスタイルライブラリを活用して、美しく効率的なユーザーインターフェイスを作成できます。

ReactのSEOに優(yōu)しい性質(zhì):検索エンジンの可視性の向上 ReactのSEOに優(yōu)しい性質(zhì):検索エンジンの可視性の向上 Apr 26, 2025 am 12:27 AM

はい、Reactapplicationscanbeseo-frendlywithpropertrategies.1)useServer-siderendering(ssr)withtoolslikenext.jstogeneratefullhtmlforindexing.2)explmentStaticSiteSite-generation(SSG)forcontent-heavysitestoprededopRederpageattiTiTeTietLe.3)

See all articles