blog

アンチディザリングとスロットリングとは何か?何が違うのか?どのように実現するのか?

1.スロットリング:高頻度イベントがトリガーされた後、関数はn秒に1回だけ実行され、n秒後に再び高頻度イベントがトリガーされた場合、時間は再計算されます アイデア:イベントがトリガーされるたびにキャン...

Aug 7, 2020 · 2 min. read
シェア

反振動: 関数は高周波でき事が誘発された後 n 秒以内に一度だけ実行されます、高周波でき事が n 秒以内に再度誘発されれば、時間は再計算されます

アイデア:イベントがトリガーされるたびにキャンセルされる遅延呼び出しメソッド

コードの例:

function debounce(fn) { let timeout = null; // タイマーの戻り値を保持するタグを作成する。 return function () { clearTimeout(timeout); // ユーザーが何かを入力するたびに、前回のsetTimeoutをクリアする。 timeout = setTimeout(() => { // 次に新しいsetTimeoutを作成し、文字が入力された後のインターバルにまだ入力された文字がある場合、fn関数は実行されないようにする。 fn.apply(this, arguments); }, 500); }; } function sayHi() { console.log('アンチシェイク成功'); } var inp = document.getElementById('inp'); inp.addEventListener('input', debounce(sayHi)); //

スロットリング:高頻度のイベントがトリガーされますが、n秒に1回しか実行されないため、スロットリングによって関数の実行頻度が低下します。

アイデア:イベントがトリガーされるたびに、実行待ちの遅延関数があるかどうかを判断 コード例

function throttle(fn) { let canRun = true; // クロージャでトークンを保存する return function () { if (!canRun) return; // 関数の冒頭で、フラグがtrueかどうかを判定し、trueでなければreturnを返す。 canRun = false; // 即座にfalseに設定する setTimeout(() => { // 外部入力関数の実行をsetTimeoutに入れる。 fn.apply(this, arguments); // 最後に、setTimeoutが実行し終わったら、フラグをtrueにセットし、次のループが実行できることを示す。タイマーが実行されない場合、フラグは常にfalseとなり、最初に戻される。 canRun = true; }, 500); }; } function sayHi(e) { console.log(e.target.innerWidth, e.target.innerHeight); } window.addEventListener('resize', throttle(sayHi));
Read next

私はクラウドテストのための賞を持っている、あなたはファストサービスを持っている?

注:貴重な意見とは、ファーウェイのファストサービス・プラットフォームの最適化に役立ち、採用される意見であり、この投稿やその他の活動で提出された重複した意見は無効です。 投稿への返信は抽選に参加することができ、合計10、経験の深さ賞と意見賞の価値は重複していません。

Aug 7, 2020 · 2 min read