当前位置:网站首页>Anti shake and throttling
Anti shake and throttling
2022-06-26 00:22:00 【Senora】
Anti shake and throttling
- Shake proof : When javascript When the trigger frequency of the function in is particularly high , You need to limit how often it triggers .
- throttle : Means to trigger events continuously but in n Function is executed only once in seconds . Throttling dilutes the frequency of function execution .
One 、 difference
Like crazy ‘ Grab tickets ’ Button
- Shake proof ( Not immediately ): No matter how many times you go crazy , I will submit your last click only when you are not crazy .
- Shake proof ( Execute immediately ): No matter how many times you go crazy , I only submit your first .
- throttle : No matter how many times you go crazy , Only count you once in a certain period of time .
Two 、 Shake proof (debounce)
Refers to when an event triggers n Seconds before the callback , If in n Second triggered again , Then recalculate the time .( After triggering an event , Before the next trigger , If the intermediate interval exceeds the set time, the request will be sent , If it is triggered all the time, the request will not be sent )
characteristic : Wait for an operation to stop , Operate at intervals .
- Continuous trigger does not execute
- Do not trigger for a period of time before executing
Main application scenarios :
- scroll Event scrolling triggers
- Search box input query
- Form validation
- Button to submit Events
- Browser window zoom ,resize event
such as : Monitor browser scrolling Events , Returns the distance between the current roll bar and the top .
function showTop () {
var scrollTop = document.body.scrollTop || document.documentElement.scrollTop;
console.log(' Scroll bar position :' + scrollTop);
}
window.onscroll = showTop // When scrolling, it will be executed very frequently
The anti shake function is divided into Not an immediate Executive and Executive now .
- Not an immediate Executive : The function does not execute immediately after the event is triggered , It's stopping triggering behavior n Seconds later , If in n Seconds to trigger the event , The function execution time is recalculated .
- Executive now : The function executes immediately after the event is triggered , then n Does not trigger the event in seconds to continue the function's effect .
// Not an immediate version
function debounce(fn, delay) {
let timeout; // Create a tag to store the return value of the timer
return function () {
clearTimeout(timeout); // Whenever an event is triggered, the previous setTimeout clear fall
timeout = setTimeout(() => {
// And then create a new one setTimeout, This will ensure that the characters are typed in this way interval If there are any characters to input in the interval , They don't execute fn function
fn.apply(this, arguments);
}, delay);
};
}
window.onscroll = debounce(showTop,1000)
// Execute version now
function debounce(fnc, delay) {
let timeout;
return function () {
clearTimeout(timeout); // Clear the last timer each time
if (!timeout) fnc.apply(this, arguments) // If timeout Did not reset to null Then execute the function
timeout = setTimeout(() => {
// At the end of the clock timeout Set as null
timeout = null;
}, delay)
}
}
window.onscroll = debounce(showTop, 1000)
Used in return function fn.apply(this, argument) Not directly fn(), It's to make debounce The function returned by the function this Direction is constant and still acceptable e Parameters .
3、 ... and 、 throttle
If an event continues to trigger , Is every n Once per second .
characteristic : After waiting for a certain interval , To operate .
- Continuous triggering does not execute multiple times
- At a certain time / Other intervals ( Such as sliding height ) To perform
Main application scenarios :
- DOM The drag function of elements is realized
- Shooting games
- Calculate the distance the mouse moves
- monitor scroll event
- Product search list 、 Commodity window, etc
function debounce(fnc, delay) {
let done = 1; // Record whether it is executable
return function () {
if(done) {
fnc.apply(this, arguments)
done = 0 // Set as non executable after execution
setTimeout(()=>{
// When the timing is over, it will be set to executable
done =1
}, delay)
}
}
}
window.onscroll = debounce(showTop, 1000)
Four 、
Another kind of view :
// throttle : Clear the timer inside the timer , Rhythmic execution events
function throttle(callback, delay = 1000){
let timer = null;
function f(){
if(!timer){
timer = setTimeout(() => {
callback && callback.call(this);
clearTimeout(timer);
timer = null;
}, delay);
}
}
return f;
}
// Shake proof : Clear the timer before the timer , Execute only the last event , It can extend the execution time indefinitely
function debounce(callback, delay = 1000) {
let timer = null;
function f() {
clearTimeout(timer);
timer = setTimeout(() => {
callback && callback.call(this);
}, delay);
}
return f;
}
边栏推荐
猜你喜欢

Machine vision: illuminating "intelligence" and creating a new "vision" world

7. common instructions (Part 2): common operations of v-on, v-bind and V-model

CaMKIIa和GCaMP6f是一样的嘛?

Mysql5.7.31 user defined installation details

ORA-01153 :激活了不兼容的介质恢复

10.4.1、數據中臺

"Seamless" deployment of paddlenlp model based on openvinotm development kit

迅为RK3568开发板使用RKNN-Toolkit-lite2运行测试程序

什么是微服务

删库跑路、“投毒”、改协议,开源有哪几大红线千万不能踩?
随机推荐
ORA-01153 :激活了不兼容的介质恢复
10.4.1、数据中台
The problem of low video memory in yolov5 accelerated multi GPU training
Shenzhen Taipower: the way of "communication" of the United Nations
Circuit board edge removal - precautions for V-CUT splitting machine
Thrift getting started
Function and principle of SPI solder paste inspection machine
Mysql5.7.31自定义安装详细说明
Darkent2ncnn error
2021-04-28
Types of feeder and how to work
Ora-01153: incompatible media recovery activated
What is micro service
10.4.1 data console
Introduction to anchor free decision
迅为RK3568开发板使用RKNN-Toolkit-lite2运行测试程序
Precautions for cleaning PCBA board in SMT chip processing
Tensorrt PB to UF problem
删库跑路、“投毒”、改协议,开源有哪几大红线千万不能踩?
EBS R12.2.0升级到R12.2.6