デバウンスとスロットルは、関数の実行速度を制御するために JavaScript で使用される 2 つの重要なテクニックです。これらの手法は、特にユーザー入力の処理、イベントのスクロール、イベントのサイズ変更などのシナリオで、パフォーマンスを最適化するためによく使用されます。どちらも関数呼び出しの頻度を制限するために使用されますが、動作方法は異なります。
デバウンス は、最後のイベントから一定の時間が経過した後にのみ関数が呼び出されるようにします。つまり、ユーザーがテキスト フィールドへの入力やウィンドウのサイズ変更などのアクションの実行を完了するまで、関数の実行が遅延されます。これは、ユーザーが検索バーに入力しているときなど、関数が頻繁に呼び出されないようにする必要があるシナリオで特に役立ちます。
function searchQuery(query) { console.log(`Searching for: ${query}`); } function debounce(func, delay) { let timeout; return function (...args) { clearTimeout(timeout); timeout = setTimeout(() => { func.apply(this, args); }, delay); }; } const debouncedSearch = debounce(searchQuery, 500); // Simulating typing events debouncedSearch("JavaScript"); debouncedSearch("JavaScript debouncing"); debouncedSearch("Debouncing function"); // Only this will be logged after 500ms
この例では:
スロットリング では、イベントが何回トリガーされたとしても、関数は指定された間隔ごとに最大 1 回呼び出されます。これは、ユーザーが特定の期間内にウィンドウをスクロールまたはサイズ変更できる回数を制限するなど、関数呼び出しの頻度を制限する場合に便利です。
function searchQuery(query) { console.log(`Searching for: ${query}`); } function debounce(func, delay) { let timeout; return function (...args) { clearTimeout(timeout); timeout = setTimeout(() => { func.apply(this, args); }, delay); }; } const debouncedSearch = debounce(searchQuery, 500); // Simulating typing events debouncedSearch("JavaScript"); debouncedSearch("JavaScript debouncing"); debouncedSearch("Debouncing function"); // Only this will be logged after 500ms
この例では:
Feature | Debouncing | Throttling |
---|---|---|
Function Execution | Executes after a delay when events stop | Executes at a fixed interval, no matter how many events occur |
Use Case | Ideal for events that occur frequently but should trigger once after some idle time (e.g., input fields, search bars) | Ideal for events that fire continuously (e.g., scroll, resize) but should be limited to a fixed interval |
Example Scenario | Search bar input where suggestions are updated only after the user stops typing for a certain period | Scroll events where a function should only run once every few seconds, even if the user scrolls frequently |
Execution Frequency | Executes only once after the event stops firing | Executes periodically, based on the interval set |
Effectiveness | Prevents unnecessary executions during rapid event firing | Controls the frequency of function executions, even during continuous events |
アプリケーションを最適化するために両方の手法が必要な場合は、デバウンスとスロットルを組み合わせることができます。たとえば、検索クエリをデバウンスしながら、スクロール イベントを抑制したい場合があります。
function searchQuery(query) { console.log(`Searching for: ${query}`); } function debounce(func, delay) { let timeout; return function (...args) { clearTimeout(timeout); timeout = setTimeout(() => { func.apply(this, args); }, delay); }; } const debouncedSearch = debounce(searchQuery, 500); // Simulating typing events debouncedSearch("JavaScript"); debouncedSearch("JavaScript debouncing"); debouncedSearch("Debouncing function"); // Only this will be logged after 500ms
この例では:
どちらの手法も、特にイベントが急速に発生する場合に、パフォーマンスを最適化し、不必要な実行を防ぐのに役立ちます。
こんにちは、アバイ・シン・カタヤットです!
私はフロントエンドとバックエンドの両方のテクノロジーの専門知識を持つフルスタック開発者です。私はさまざまなプログラミング言語やフレームワークを使用して、効率的でスケーラブルでユーザーフレンドリーなアプリケーションを構築しています。
ビジネス用メールアドレス kaashshorts28@gmail.com までお気軽にご連絡ください。
以上がJavaScript におけるデバウンスとスロットリング: 関数呼び出しを最適化してパフォーマンスを向上させるの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。