検索

DOM 最適化の本質は、実際には DOM ツリーのリフローと再描画を減らすことです。リフローと再描画の理解については、「フロントエンド知識の普及のための HTML」を参照してください。

DOM の構造の最適化は、参照の保存、アニメーションの最適化、ノードの保存、ノードの更新などの基本的な操作にすぎません。 。

インターネットで HTML を閲覧していたとき、多くの人 (子供) が異口同音に、DOM ノードを取得したら必ず保存する必要があると言っていたことを思い出します。そうしないと、結果は醜いものになります。

なぜ~なぜ~なぜ~

いわゆるjsが実際にはDOM、BOM、ECMAの組み合わせの産物であることは誰もが知っています。 元々、私の JS は非常に高速でしたが、会話するには DOM にアクセスする必要がありました。 どうすればいいでしょうか? ドアをノックして DOM が応答するのを待つしかありません~しかし、待ち時間は非常に長いです。

デモを見てみましょう。

var times=10000;var time1 = function(){   var time = times;  while(time--){  //DOM的两个操作放在循环内      var dom = document.querySelector("#Div1");      dom.innerHTML+="a";  }};var time2=function(){    var time = times,    dom = document.querySelector("#Div1");  while(time--){ //DOM的一个操作放在循环内     dom.innerHTML+="a";  }};var time3=function(){    var time = times,    dom = document.querySelector("#Div1"),    str = "";  while(time--){ //循环内不放置DOM的操作    str +="a";  }  dom.innerHTML=str;}console.time(1);  //设置时间起点time1();console.timeEnd(1);console.time(2);  //设置时间起点time2();console.timeEnd(2);console.time(3);  //设置时间起点time3();console.timeEnd(3);//测试结果为:1: 101.868ms2: 101.560ms3: 13.615ms

もちろん、これは単なる誇張された例です。DOM を頻繁に操作する場合は、次のことを覚えておいてください。保存するために。 さらに、保存する場合は、DOM 関連の操作をすべて保存する必要があります。

たとえば、style、innerHTML、その他の属性。

これを行う原則は、リフローと再描画の数を減らすことです。

リフローと再描画が発生するとどうなりますか?

リフローと再描画は通常どのような状況で発生しますか?リフローが発生します:

  1. 表示可能な DOM 要素の追加または削除

  2. 要素の位置の変更

  3. 要素のサイズ変更

  4. 要素の内容が変更されます (例: テキストが異なるサイズの別の画像に置き換えられます)

  5. ページ レンダリングの初期化 (これは不可避です) )

  6. ブラウザウィンドウのサイズ変更

一般に、ページのレイアウトやサイズが変更された場合でもリフローが発生します。再塗装はいつ行われますか? リフローが発生すると必ず再描画が発生しますが、再描画の範囲はリフローよりも若干大きくなります。たとえば、フォントの色、ページの背景色、その他の比較的「表面的な」操作のみを変更する場合、リフローは妨げられません。

DOM のマージ操作

次のように操作すると、

div.style.color="red";div.style.border="1px solid red";

ブラウザは 2 つの再配置を 1 つにスマートにマージし、リソースを節約します。 実際、関数スロットルの考え方はこれと似ています。

var throttle = (function(){    var time;    return function(fn,context){          clearTimeout(time);  //进行函数的节流        time = setTimeout(fn.bind(context),200);    }})()

この手法は通常、ブラウザのサイズを変更するときに使用されます。ただし、途中の場合は、offsetTop、clientTop などのプロパティにアクセスすると、すぐに実行されます。そうすれば、結果はあなたにとって何もありません。

div.style.color="red";  //积累一次重排记录var height = div.clientHeight;  //触发重排div.style.border="1px solid red";  //再次积累一次重排

現時点では、ブラウザはあなたに騙されています。 したがって、ちょっとした提案は、DOM 構造を変更したい場合は、すべてを一度に完了するのが最善であるということです。または、すべてを完了したい場合は、上記の CSS 変更は次のように行うこともできます

div.style.cssText="color:red;border:1px solid red"; //覆盖原来的cssdiv.classList.add("change"); //利用class来整体改动

DOM 操作の最適化

DOM 操作は単なる CRUD です。基本 API の簡単な紹介です

ノードの作成

var div = document.createELement("div");

ノードの検索

var divs = document.querySelectorAll('div'); //很多个,放在数组内var onlydiv = document.querySelector('div'); //只有一个//以及document.getElement系列

ノードの表示

var html = div.innerHTML; var outer = div.outerHTML;  //这两个是非常常用的var classNames = div.classList;var className = div.className;var tagName = div.tagName;var id = div.id;var style = div.getAttribute("style");//....

ノードの移動

ele.replaceChild(replace,replaced); //replace代替replaced//添加子节点ele.appendChild(child);//删除子节点ele.removeChild(child);//插入子节点ele.insertBefore(newEle,referenceEle);

わかりました~ 実際、上記の API は、DOM 操作を伴う限り再配置されます。したがって、ここで最適化できます。

フラグメントを使用します

バッチで子ノードを追加する必要がある場合は、フラグメントの仮想フラグメントをコンテナとして使用する必要があります。 100 個の p タグを追加する必要があります

var times = 100;var addP = function(){    var time = times,    tag1 = document.querySelector('#tag1');    while (time--) {        var p = document.createElement('p');        tag1.appendChild(p);    }}var useFrag = function(){    var time = times,    tag1 = document.querySelector('#tag1'),    frag = document.createDocumentFragment();    while (time--) {        var p = document.createElement('p');        frag.appendChild(p);    }    tag1.appendChild(frag);}console.time(1);addP();console.timeEnd(1);console.time(2);useFrag();console.timeEnd(2);//基本事件差为:1: 1.352ms2: 0.685ms

フラグメント フラグメントを使用することに加えて、innerHTML と externalHTML を使用して、関連する最適化操作を実行することもできます。ここでは詳細には触れません

UI 操作の最適化

ここで言いたいことはあまりありません。絶対レイアウトの使用方法を学ぶだけです。 関連する UI 操作を実行するときに、誤って全画面表示が発生する可能性があることは間違いありません。たとえば、キャンパスの中古街のレイアウトでは、下にスクロールするとヘッダーバーが拡大され、レイアウトが悪いとページ全体が再配置されます。 (バカ、バカ、バカ、バカ)

彼はここで違います。彼はレイアウトに直接絶対値を使用し、ドキュメントの流れから離れ、過剰なページの再配置を防ぎます。

最後に:

最適化への道は長いので、気をつけてください~

声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
HTMLのブール属性とは何ですか?いくつかの例を挙げてください。HTMLのブール属性とは何ですか?いくつかの例を挙げてください。Apr 25, 2025 am 12:01 AM

ブール属性は、値なしでアクティブ化されるHTMLの特別な属性です。 1.ブール属性は、無効化された入力ボックスを無効にするなど、存在するかどうかによって、要素の動作を制御します。 2.彼らの実用的な原則は、ブラウザが異なっているときに属性の存在に応じて要素の動作を変更することです。 3.基本的な使用法は、属性を直接追加することであり、高度な使用法はJavaScriptを介して動的に制御できます。 4.一般的な間違いは、値を設定する必要があると誤って考えており、正しい執筆方法は簡潔にする必要があります。 5.ベストプラクティスは、コードを簡潔に保ち、ブールのプロパティを合理的に使用して、Webページのパフォーマンスとユーザーエクスペリエンスを最適化することです。

HTMLコードをどのように検証できますか?HTMLコードをどのように検証できますか?Apr 24, 2025 am 12:04 AM

HTMLコードは、オンラインバリデーター、統合ツール、自動化されたプロセスを使用するとクリーンになります。 1)w3cmarkupvalidationserviceを使用して、HTMLコードをオンラインで確認します。 2)リアルタイム検証のためにVisualStudiocodeにhtmlhint拡張機能をインストールして構成します。 3)HTMLTIDYを使用して、建設プロセスでHTMLファイルを自動的に検証およびクリーニングします。

HTML対CSSおよびJavaScript:Webテクノロジーの比較HTML対CSSおよびJavaScript:Webテクノロジーの比較Apr 23, 2025 am 12:05 AM

HTML、CSS、およびJavaScriptは、最新のWebページを構築するためのコアテクノロジーです。1。HTMLはWebページ構造を定義します。2。CSSはWebページの外観に責任があります。

マークアップ言語としてのHTML:その機能と目的マークアップ言語としてのHTML:その機能と目的Apr 22, 2025 am 12:02 AM

HTMLの機能は、Webページの構造とコンテンツを定義することであり、その目的は、情報を表示するための標準化された方法を提供することです。 1)HTMLは、タイトルやパラグラフなどのタグや属性を使用して、Webページのさまざまな部分を整理しています。 2)コンテンツとパフォーマンスの分離をサポートし、メンテナンス効率を向上させます。 3)HTMLは拡張可能であり、カスタムタグがSEOを強化できるようにします。

HTML、CSS、およびJavaScriptの未来:Web開発動向HTML、CSS、およびJavaScriptの未来:Web開発動向Apr 19, 2025 am 12:02 AM

HTMLの将来の傾向はセマンティクスとWebコンポーネントであり、CSSの将来の傾向はCSS-in-JSとCSShoudiniであり、JavaScriptの将来の傾向はWebAssemblyとServerLessです。 1。HTMLセマンティクスはアクセシビリティとSEO効果を改善し、Webコンポーネントは開発効率を向上させますが、ブラウザの互換性に注意を払う必要があります。 2。CSS-in-JSは、スタイル管理の柔軟性を高めますが、ファイルサイズを増やす可能性があります。 CSShoudiniは、CSSレンダリングの直接操作を可能にします。 3. Webassemblyブラウザーアプリケーションのパフォーマンスを最適化しますが、急な学習曲線があり、サーバーレスは開発を簡素化しますが、コールドスタートの問題の最適化が必要です。

HTML:構造、CSS:スタイル、JavaScript:動作HTML:構造、CSS:スタイル、JavaScript:動作Apr 18, 2025 am 12:09 AM

Web開発におけるHTML、CSS、およびJavaScriptの役割は次のとおりです。1。HTMLは、Webページ構造を定義し、2。CSSはWebページスタイルを制御し、3。JavaScriptは動的な動作を追加します。一緒に、彼らは最新のウェブサイトのフレームワーク、美学、および相互作用を構築します。

HTMLの未来:ウェブデザインの進化とトレンドHTMLの未来:ウェブデザインの進化とトレンドApr 17, 2025 am 12:12 AM

HTMLの将来は、無限の可能性に満ちています。 1)新機能と標準には、より多くのセマンティックタグとWebComponentsの人気が含まれます。 2)Webデザインのトレンドは、レスポンシブでアクセス可能なデザインに向けて発展し続けます。 3)パフォーマンスの最適化により、応答性の高い画像読み込みと怠zyなロードテクノロジーを通じてユーザーエクスペリエンスが向上します。

HTML対CSS対JavaScript:比較概要HTML対CSS対JavaScript:比較概要Apr 16, 2025 am 12:04 AM

Web開発におけるHTML、CSS、およびJavaScriptの役割は次のとおりです。HTMLはコンテンツ構造を担当し、CSSはスタイルを担当し、JavaScriptは動的な動作を担当します。 1。HTMLは、セマンティクスを確保するためにタグを使用してWebページの構造とコンテンツを定義します。 2。CSSは、セレクターと属性を介してWebページスタイルを制御して、美しく読みやすくします。 3。JavaScriptは、動的でインタラクティブな関数を実現するために、スクリプトを通じてWebページの動作を制御します。

See all articles

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

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

ホットツール

WebStorm Mac版

WebStorm Mac版

便利なJavaScript開発ツール

DVWA

DVWA

Damn Vulnerable Web App (DVWA) は、非常に脆弱な PHP/MySQL Web アプリケーションです。その主な目的は、セキュリティ専門家が法的環境でスキルとツールをテストするのに役立ち、Web 開発者が Web アプリケーションを保護するプロセスをより深く理解できるようにし、教師/生徒が教室環境で Web アプリケーションを教え/学習できるようにすることです。安全。 DVWA の目標は、シンプルでわかりやすいインターフェイスを通じて、さまざまな難易度で最も一般的な Web 脆弱性のいくつかを実践することです。このソフトウェアは、

SublimeText3 英語版

SublimeText3 英語版

推奨: Win バージョン、コードプロンプトをサポート!

EditPlus 中国語クラック版

EditPlus 中国語クラック版

サイズが小さく、構文の強調表示、コード プロンプト機能はサポートされていません

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター