振れ防止と節流の理解と応用例
8697 ワード
タイトルはブレ止めです。
ジッタ防止ポリシーは、イベントがトリガーされた後、n秒遅延した後にコールバックを実行し、このn秒以内にイベントがトリガーされた場合に再カウントする.城に戻って中断されたように、城に戻りたい場合、手ぶれ防止ケースを再計時しなければならない.ユーザーが入力ボックスに文字を連続的に入力した場合、手ぶれ防止戦略を通じて、入力が終わった後だけ、クエリーの要求を実行することができる.このように、要求回数を効果的に減らし、要求資源を節約することができる.
<input type="text"><span>span>
var timer = null;
// , 。 ,
document.querySelector('input').onkeyup = function () {
if (timer !== null) {
clearTimeout(timer);
};
timer = setTimeout( () => {
var val = this.value;
var xhr = new XMLHttpRequest();
xhr.open('GET', '/getName?username=' + val)
xhr.onload = function () {
var res = JSOn.parse(this.response);
document.querySelector('span').innerText = res.msg;
};
xhr.send(null)
}, 500)
}
スロットルとは
スロットルポリシー(throttle)は、その名の通り、しばらくの間イベントのトリガ頻度を減らすことができます.弾丸を発射する射速のように、いくら押しても射速はスロットルケースを増加させません:マウスに従って移動する天使の効果を最適化します:スロットル関数を加えた後、mousemove時間の出発に伴って出発して、一定の時間(20 ms)の制限があって、性能を節約して、もちろんこれはスロットルケースの1つの小さい応用にすぎません
<img src="./angle.jpg" alt="">
var timer = null;
document.onmousemove = function (e) {
if (timer !== null) {
//
return;
};
timer = setTimerout(() => {
document.querySelector('img').style.left = e.pageX + 'px';
document.querySelector('img').style.top = e.pageX + 'px';
//
timer = null
}, 20) // ,
}