当前位置:网站首页>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;
}
边栏推荐
- Some basic uses of mongodb
- redux工作流程+小例子的完整代码
- Redis jump table
- SMT操作员是做什么的?工作职责?
- P3052 [USACO12MAR]Cows in a Skyscraper G
- SMT行业AOI,X-RAY,ICT分别是什么?作用是?
- 10.4.1 data console
- Farsync simple test
- mtb13_Perform extract_blend_Super{Candidate(PrimaryAlternate)_Unique(可NULL过滤_Foreign_index_granulari
- Record some CF questions
猜你喜欢

性能领跑云原生数据库市场!英特尔携腾讯共建云上技术生态

10.2.3、Kylin_kylin的使用,维度必选

Redis jump table

JS to input the start time and end time, output the number of seasons, and print the corresponding month and year

【ROS进阶篇】第一讲 常用API介绍

快手实时数仓保障体系研发实践

CaMKIIa和GCaMP6f是一样的嘛?

When installing PSU /usr/bin/ld:warning: -z lazload ignore

11.1.1、flink概述_flink概述

POSTMAN测试出现SSL无响应
随机推荐
Detailed explanation of redis
PCB生产为什么要做拼板和板边
Servlet response下载文件
What do SMT operators do? operating duty?
Redis cluster
【图像检测】基于高斯过程和Radon变换实现血管跟踪和直径估计附matlab代码
Simulink求解器综合介绍
Rocket message storage
MySQL master-slave replication
Record some CF questions
Smt贴片机保养与维护要点
js数组中修改元素的方法
Tensorrt PB to UF problem
Mysql5.7.31 user defined installation details
SPI锡膏检查机的作用及原理
leetcode.14 --- 最长公共前缀
Redis memory elimination mechanism
Farsync simple test
11.1.1、flink概述_flink概述
SMT行业AOI,X-RAY,ICT分别是什么?作用是?