ホームページ ウェブフロントエンド jsチュートリアル jQuery コードの最適化 traversal_jquery

jQuery コードの最適化 traversal_jquery

May 16, 2016 pm 05:59 PM
コードの最適化 トラバース

jQuery の DOM トラバーサルの背後にある動作メカニズムを理解すると、コードを記述するときに不必要な繰り返し操作を意識的に回避できるため、コードのパフォーマンスが向上します。この記事では、jQuery のトラバーサル メカニズムから始めて、jQuery コードの最適化の問題について簡単に説明します。

jQuery オブジェクト スタック

jQuery は、jQuery オブジェクト スタックを内部的に維持します。各トラバーサル メソッドは新しい要素のセット (jQuery オブジェクト) を見つけ、jQuery はその要素のセットをスタックにプッシュします。各 jQuery オブジェクトには、context、selector、prevObject の 3 つの属性があります。prevObject 属性は、オブジェクト スタック内の前のオブジェクトを指し、この属性を通じて、元の DOM 要素のセットに戻ることができます。

jQuery には、この内部オブジェクト スタックを操作するための 2 つの非常に便利なメソッドが用意されています。

.end()
.andSelf()
最初のメソッドを呼び出すと、単にポップアップが表示されます。オブジェクト (前の jQuery オブジェクトに戻ります)。 2 番目のメソッドの呼び出しは、より興味深いもので、スタック内の位置をバックトラックし、2 つの位置で要素セットを結合し、結合された新しい要素セットをスタックの先頭にプッシュします。

この DOM 要素スタックを使用すると、クエリとトラバーサル操作の繰り返しを減らすことができ、繰り返しの操作を減らすことが jQuery コードのパフォーマンスを最適化する鍵となります。

最適化例
以下はテーブル行ストライプ効果を実現する関数(前後のコードは省略)です:

コードをコピー コードは次のとおりです:

function Stripe() {
$('#news').find('tr .alt').removeClass ('alt');
$('#news tbody').each(function() {
$(this).children(':visible').has('td ')
.filter(':group(3)').addClass('alt');
}

関数はID セレクターを 2 回 #news 要素を検索します。1 回はそのクラスを含む行から alt クラスを削除し、もう 1 回は新しく選択した行にクラスを追加します。

この関数を最適化するには 2 つの方法があり、1 つは連結です。


連結 連結の最適化では、jQuery の内部オブジェクト スタックと .end() メソッドを利用します。最適化されたコードは次のとおりです。

コードをコピー コードは次のとおりです。
関数ストライプ() {
$('#news').
find('tr.alt').removeClass('alt').end()
find('tbody').each(function( ) {
$(this).children(':visible').has('td')
.filter(':group(3)').addClass('alt'); );
}


.find() への最初の呼び出しでテーブルの行がスタックにプッシュされ、次に .end() メソッドによってこれらの行がポップアウトされ、次の呼び出しが可能になります。 to .find() #news テーブルで操作を引き続き実行しています。これにより、2 つのセレクター検索が 1 つに減ります。

もう 1 つの最適化方法はキャッシュです。


キャッシュ
ここでのいわゆるキャッシュとは、将来の再利用のために以前の操作の結果を保存することです。最適化されたコードは次のとおりです。

var $ニュース = $( '#news');
関数 ストライプ() {
$news.find('tr.alt').removeClass('alt'); ').each (function() {
$(this).children(':visible').has('td')
.filter(':group(3)').addClass('alt ');
});
}


キャッシュ メソッドは、jQuery オブジェクトを保存するために追加の変数が作成されるため、もう少し冗長です。しかし、別の観点から見ると、このメソッドはコード内の選択された要素に対する 2 つの操作を完全に分離できるため、他の状況でのニーズを満たす可能性があります。同様に、選択した要素は stripe() 関数の外部に保存できるため、関数が呼び出されるたびにセレクターを繰り返しクエリする必要がなくなります。

結論

jQuery の内部オブジェクト スタックとキャッシュを使用すると、繰り返される DOM クエリとトラバーサルが削減され、スクリプトの実行速度が向上します。 ID に基づいてページ内の要素を選択するのは非常に高速であるため、最適化の前後で上記 2 つの例の間に明らかなパフォーマンスの違いはありません。実際のコーディングでは、最も読みやすく保守が容易な方法を選択する必要があります。実際にパフォーマンスのボトルネックが発生した場合は、上記の最適化手法を使用するとすぐに結果が得られる可能性があります。

(注: この記事は、『JQuery 基礎チュートリアル (第 3 版)』の関連する章に基づいています。)
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホット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衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

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

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

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

Java フォルダーをループしてすべてのファイル名を取得する方法 Java フォルダーをループしてすべてのファイル名を取得する方法 Mar 29, 2024 pm 01:24 PM

Java は、強力なファイル処理機能を備えた人気のあるプログラミング言語です。 Java では、フォルダーを走査してすべてのファイル名を取得するのが一般的な操作であり、これは特定のディレクトリー内のファイルを迅速に見つけて処理するのに役立ちます。この記事では、Java でフォルダーを走査してすべてのファイル名を取得するメソッドを実装する方法と、具体的なコード例を紹介します。 1. 再帰的メソッドを使用してフォルダーを走査する 再帰的メソッドを使用してフォルダーを走査することができます。再帰的メソッドはそれ自体を呼び出す方法であり、フォルダーを効果的に走査できます。

Javaコードをうまくリファクタリングする方法 Javaコードをうまくリファクタリングする方法 Jun 15, 2023 pm 09:17 PM

Java は世界で最も人気のあるプログラミング言語の 1 つとして、多くの企業や開発者にとって選ばれる言語となっています。ただし、コードの品質と開発効率を維持するには、コードのリファクタリングが不可欠です。 Java コードは複雑であるため、時間の経過とともに保守がますます困難になる可能性があります。この記事では、コードの品質と保守性を向上させるために Java コードをリファクタリングする方法について説明します。リファクタリングの原則を理解する Java コードのリファクタリングの目的は、単に「コードを変更する」ことではなく、コードの構造、可読性、保守性を向上させることです。なぜなら

プログラムのパフォーマンスを最適化するための一般的な方法は何ですか? プログラムのパフォーマンスを最適化するための一般的な方法は何ですか? May 09, 2024 am 09:57 AM

プログラムのパフォーマンスの最適化方法には、次のようなものがあります。 アルゴリズムの最適化: 時間の複雑さが低いアルゴリズムを選択し、ループと条件文を減らします。データ構造の選択: ルックアップ ツリーやハッシュ テーブルなどのデータ アクセス パターンに基づいて、適切なデータ構造を選択します。メモリの最適化: 不要なオブジェクトの作成を回避し、使用されなくなったメモリを解放し、メモリ プール テクノロジを使用します。スレッドの最適化: 並列化できるタスクを特定し、スレッド同期メカニズムを最適化します。データベースの最適化: インデックスを作成してデータの取得を高速化し、クエリ ステートメントを最適化し、キャッシュまたは NoSQL データベースを使用してパフォーマンスを向上させます。

PHP glob() 関数の使用例: 指定したフォルダー内のすべてのファイルを走査する PHP glob() 関数の使用例: 指定したフォルダー内のすべてのファイルを走査する Jun 27, 2023 am 09:16 AM

PHPglob() 関数の使用例: 指定したフォルダー内のすべてのファイルを走査する PHP 開発では、バッチ操作やファイルの読み取りを実装するために、指定したフォルダー内のすべてのファイルを走査する必要がよくあります。この要件を達成するには、PHP の glob() 関数が使用されます。 glob()関数は、ワイルドカードのマッチングパターンを指定することで、指定したフォルダー内の条件を満たすすべてのファイルのパス情報を取得できます。この記事では、glob() 関数を使用して、指定したフォルダー内のすべてのファイルを反復処理する方法を説明します。

PHP の高同時処理におけるコード最適化手法 PHP の高同時処理におけるコード最適化手法 Aug 11, 2023 pm 12:57 PM

PHP のコード最適化テクニック 高度な同時実行処理 インターネットの急速な発展に伴い、高度な同時実行処理が Web アプリケーション開発における重要な問題になっています。 PHP 開発では、同時多発リクエストに対処するためにコードをどのように最適化するかが、プログラマーが解決する必要がある難しい問題となっています。この記事では、PHP の高同時実行処理におけるコード最適化テクニックをいくつか紹介し、コード例を追加して説明します。キャッシュの合理的な使用 同時実行性が高い状況では、データベースに頻繁にアクセスすると、過剰なシステム負荷が発生し、データベースへのアクセスが比較的遅くなります。したがって、できることは、

Java Spring Boot Security パフォーマンスの最適化: システムを高速化します。 Java Spring Boot Security パフォーマンスの最適化: システムを高速化します。 Feb 19, 2024 pm 05:27 PM

1. セキュリティ アノテーションの使用が多すぎることを避けるためのコードの最適化: コントローラーとサービスでは、@PreAuthorize や @PostAuthorize などのアノテーションの使用を減らすようにしてください。これらのアノテーションにより、コードの実行時間が増加します。クエリ ステートメントの最適化: springDataJPA を使用する場合、クエリ ステートメントを最適化するとデータベースのクエリ時間が短縮され、システムのパフォーマンスが向上します。セキュリティ情報のキャッシュ: 一般的に使用される一部のセキュリティ情報をキャッシュすると、データベース アクセスの数が減り、システムの応答速度が向上します。 2. データベースの最適化にインデックスを使用する: 頻繁にクエリが実行されるテーブルにインデックスを作成すると、データベースのクエリ速度が大幅に向上します。ログと一時テーブルを定期的にクリーンアップする: ログと一時テーブルを定期的にクリーンアップします。

Java Iterator と Iterable の詳細な比較: 長所と短所の分析 Java Iterator と Iterable の詳細な比較: 長所と短所の分析 Feb 19, 2024 pm 04:20 PM

概念的な違い: イテレータ: イテレータは、コレクションから値を取得するイテレータを表すインターフェイスです。 MoveNext()、Current()、Reset() などのメソッドを提供し、コレクション内の要素を横断して現在の要素を操作できるようにします。 Iterable: Iterable は、反復可能なオブジェクトを表すインターフェイスでもあります。これは、コレクション内の要素の走査を容易にする Iterator オブジェクトを返す Iterator() メソッドを提供します。使用法: Iterator: Iterator を使用するには、まず Iterator オブジェクトを取得し、次に MoveNext() メソッドを呼び出して次のオブジェクトに移動する必要があります。

Python 3.x で os モジュールを使用してディレクトリ内のファイルを走査する方法 Python 3.x で os モジュールを使用してディレクトリ内のファイルを走査する方法 Jul 29, 2023 pm 02:57 PM

Python3.x で os モジュールを使用してディレクトリ内のファイルを走査する方法 Python では、os モジュールを使用してファイルやディレクトリを操作できます。 os モジュールは、Python 標準ライブラリの重要なモジュールであり、オペレーティング システム関連の多くの機能を提供します。この記事では、os モジュールを使用してディレクトリ内のすべてのファイルを反復処理する方法を説明します。まず、os モジュールをインポートする必要があります。 importos 次に、os.walk() 関数を使用してディレクトリを移動します。

See all articles