当前位置:网站首页>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;
}
边栏推荐
- 小红书微服务框架及治理等云原生业务架构演进案例
- Display unassigned virtual address after easyconnect connection
- Record some CF questions
- Redis cluster
- What do SMT operators do? operating duty?
- Mysql5.7 is in the configuration file my Ini[mysqld] cannot be started after adding skip grant tables
- Why do we need to make panels and edges in PCB production
- Servlet response下载文件
- SSL unresponsive in postman test
- Is camkiia the same as gcamp6f?
猜你喜欢

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

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

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

Display unassigned virtual address after easyconnect connection

MySQL master-slave replication

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

10.4.1 données intermédiaires

鼠标拖拽围绕某个物体旋转展示

EBS R12.2.0升级到R12.2.6

安装PSU的时候/usr/bin/ld:warning: -z lazyload ignore
随机推荐
Tensorrt PB to UF problem
ffmpeg 版本切换
Redis cluster
Summary of common terms and knowledge in SMT chip processing industry
Redux workflow explanation + small examples
Mysql5.7.31自定义安装详细说明
Display unassigned virtual address after easyconnect connection
Research and development practice of Kwai real-time data warehouse support system
元宇宙中的法律与自我监管
(Reprint) visual explanation of processes and threads
Redux workflow + complete code of small examples
SQL按某字段去重 保留按某个字段排序最大值
About the solution to prompt modulenotfounderror: no module named'pymongo 'when running the scratch project
解决线程并发安全问题
Topic36——53. Maximum subarray and
【OEM专场活动】清“芯”夏日,有奖征文
11.1.1、flink概述_flink概述
Use js to obtain the last quarter based on the current quarter
EBS R12.2.0升级到R12.2.6
Record some CF questions