アンチシェイク
イベントが頻繁にトリガーされる場合、バインドされたメソッドを頻繁に呼び出さないように、アンチシェイクとスロットリングを使用して、対応するメソッドの呼び出し回数を減らし、パフォーマンスを向上させます。
アンチシェイクの原理:
指定された時間の頻繁なトリガは、最初の時間または最後の時間のみ実行され、この指定された時間は、再びタイマーで呼び出されたメソッドが動作しないように、別のタイマーを設計するタイマーによってクリアされますトリガします。だから、時間の期間の後にのみトリガされ、もはやタイマーをクリアするためにトリガされませんので、実行する指定された時間の後にタイマーの最終的な設計は、アンチシェイクの即時実装は、実行するためにヌル時間のための真とタイマーのimmdiateにある、つまり、クリックすると、この時点ではタイマーがないことを確認するために、タイマーがあり、状況の頻繁なトリガでクリックします。
ブレ防止コード
function debounce(func,wait,immdiate){
let timer=null
return function fun(...args){
let canDo=immdiate&&!timer
canDo?func.call(this,...args):null
clearTimout(timer)
timer=setTimeout(()=>{
timer=null
!immdiate?func.call(this,...args):null
},wait)
}
}
スロットリング
スロットリングの原理は、現在のトリガ時刻は、間隔が指定された時間を超えている場合、それはすぐに実行する必要があり、間隔が指定された時間未満である場合は、すぐにタイマーを設計するために実行することはできません、時間を減算する時間の実装では、時間を取得するために実行され、以前をリセットし、メソッドの実装後、以前を変更するには、タイマーをクリアし、NULLに設定する場合は、ここに注意する必要があります。あなたはすでにタイマーを持っている場合は、直接行の時間にタイマーを待って動作する必要はありません。
スロットルコード
function throttle(func,wait){
let timer=null,
previous=0
return function fun(...args){
let now=new Date()
let minus=wait-(now-previous)
if(minus<0){
func.call(this,args)
previous=now
}else if(!timer){
//タイマーがない場合は、タイマーを設計し、複数のタイマーを設計することは避ける
timer=setTimeout(()=>{
clearTimeout(timer)
timer=null
previous=new Date()
func.call(this,args)
},minus)
}
}
}