ホームページ >ウェブフロントエンド >jsチュートリアル >ReactJS のデバウンス/スロットル技術を使用してサーバー負荷を軽減する
デバウンスとスロットリングは、頻繁なイベント (入力、スクロール、サイズ変更など) に応じて関数の実行頻度を制御することでパフォーマンスを最適化するために使用される手法です。
デバウンスは、最後に呼び出されてから一定の時間が経過するまで関数の実行を遅らせます。
import React, { useState, useEffect } from 'react'; const DebouncedSearch = () => { const [searchTerm, setSearchTerm] = useState(''); const [debouncedValue, setDebouncedValue] = useState(''); useEffect(() => { const handler = setTimeout(() => { setDebouncedValue(searchTerm); }, 500); // Delay of 500ms return () => { clearTimeout(handler); // Cleanup on input change }; }, [searchTerm]); useEffect(() => { if (debouncedValue) { console.log('API Call with:', debouncedValue); // Make API call here } }, [debouncedValue]); return ( <input type="text" placeholder="Search..." value={searchTerm} onChange={(e) => setSearchTerm(e.target.value)} /> ); }; export default DebouncedSearch;
スロットリングにより、関数が指定された時間間隔内に何回トリガーされたかに関係なく、関数がその間隔内で最大 1 回実行されることが保証されます。
import React, { useEffect } from 'react'; const ThrottledScroll = () => { useEffect(() => { const handleScroll = throttle(() => { console.log('Scroll event fired'); }, 1000); // Execute at most once every 1000ms window.addEventListener('scroll', handleScroll); return () => { window.removeEventListener('scroll', handleScroll); }; }, []); return <div> <hr> <h3> <strong>3. Using Libraries (Optional)</strong> </h3> <p>Instead of implementing custom debounce/throttle, you can use popular libraries like:</p> <h4> <strong>Lodash</strong> </h4> <p>Install:<br> </p> <pre class="brush:php;toolbar:false">npm install lodash
使用法:
import { debounce, throttle } from 'lodash'; // Debounce Example const debouncedFunc = debounce(() => console.log('Debounced!'), 500); // Throttle Example const throttledFunc = throttle(() => console.log('Throttled!'), 1000);
インストール:
npm install react-use
使用法:
import { useDebounce, useThrottle } from 'react-use'; const Demo = () => { const [value, setValue] = useState(''); const debouncedValue = useDebounce(value, 500); const throttledValue = useThrottle(value, 1000); useEffect(() => { console.log('Debounced:', debouncedValue); console.log('Throttled:', throttledValue); }, [debouncedValue, throttledValue]); return ( <input value={value} onChange={(e) => setValue(e.target.value)} placeholder="Type something..." /> ); }; export default Demo;
Feature | Debouncing | Throttling |
---|---|---|
Execution | Executes once after the user stops firing events for a specified time. | Executes at regular intervals during the event. |
Use Cases | Search input, resizing, form validation. | Scroll events, button clicks, API polling. |
Performance | Reduces the number of function calls. | Limits execution to once per interval. |
以上がReactJS のデバウンス/スロットル技術を使用してサーバー負荷を軽減するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。