Home Web Front-end JS Tutorial Detailed explanation of JavaScript function throttling concepts and usage examples

Detailed explanation of JavaScript function throttling concepts and usage examples

Dec 29, 2016 am 10:04 AM

The examples in this article describe the concept and usage of JavaScript function throttling. I share it with you for your reference. The details are as follows:

Recently when I was making a web page, I had a need to change the size of some page elements when the browser window changed, so I naturally thought of window resize. Event, so that’s what I wrote

<!DOCTYPE html>
<html>
<head>
  <title>Throttle</title>
</head>
<body>
  <script type="text/javascript">
    n=0;
    function resizehandler(){
      console.log(new Date().getTime());
      console.log(++n);
    }
    window.onresize=resizehandler;
  </script>
</body>
</html>
Copy after login

The function was implemented, but when I changed the size of the browser window by dragging, I looked at the console

Yes, it’s simple A drag and drop caused my resizeHandler() method to be executed 52 times. This is not the effect I want at all. In fact, the code of my resizeHandler() method is very complicated, and I even use ajax to send a request to the server. If it were a simple one Changing the window size requires calling it 52 times, which is okay.

Function throttling

In fact, my original intention is just to make some adjustments to the page after the window is resized, and the resize event of the window is not in It is triggered after resize is completed. I don't know the specific frequency, but it is called continuously until the window size no longer changes. In fact, a similar mechanism is mousemove, which is triggered repeatedly in a short period of time.

In "JavaScript Advanced Programming", there is a special function throttling to deal with this problem

function throttle(method,context){
  clearTimeout(method.tId);
  method.tId=setTimeout(function(){
    method.call(context);
  },500);
}
Copy after login

The principle is very simple. Use a timer to delay function execution by 500 milliseconds. If within 500 milliseconds, If the function is called again, the previous call will be deleted, and this call will be executed 500 milliseconds later, and so on. In this way, I can change the code I just made to

<script type="text/javascript">
n=0;
function resizehandler(){
  console.log(new Date().getTime());
  console.log(++n);
}
function throttle(method,context){
  clearTimeout(method.tId);
  method.tId=setTimeout(function(){
    method.call(context);
  },500);
}
window.onresize=function(){
  throttle(resizehandler,window);
};
</script>
Copy after login

and try dragging it. Sure enough, it is only executed once.

Another approach

There is also a function throttling solution on the Internet , this is how it is done

function throttle(method,delay){
  var timer=null;
  return function(){
    var context=this, args=arguments;
    clearTimeout(timer);
    timer=setTimeout(function(){
      method.apply(context,args);
    },delay);
  }
}
Copy after login

Try calling it, the same effect

<script type="text/javascript">
n=0;
function resizehandler(){
  console.log(new Date().getTime());
  console.log(++n);
}
function throttle(method,delay){
  var timer=null;
  return function(){
    var context=this, args=arguments;
    clearTimeout(timer);
    timer=setTimeout(function(){
      method.apply(context,args);
    },delay);
  }
}
window.onresize=throttle(resizehandler,500);//因为返回函数句柄,不用包装函数了
</script>
Copy after login

Detailed explanation of JavaScript function throttling concepts and usage examples

Comparison

Both methods are used Instead of setTimeout, the difference is that the function added by the second method delays the execution time. This function is easily available in the first solution, just by adding a parameter.

But the first solution sets tId as a variable of the function and saves it, while the second solution creates a closure to store it. Personally, I don't think the difference is big. I really like the first one, it's simple and efficient.

New requirements

One day I made something similar, just like the automatic prompt for input on the Baidu homepage. I bound the keyup event to the text, every time the keyboard bounces up. It prompts automatically, but I don’t want to prompt so frequently, so I used the above method, but it’s a tragedy. It only prompts after stopping input for 500 milliseconds. There is no prompt at all during the input process. I looked at the code and found that it is not true. As long as the user can touch type and press the keyboard within 500 milliseconds, the prompt function will be continuously delayed, so that the prompt will only occur when it stops, which is meaningless.

Can it be executed at a fixed interval based on function throttling?

Small changes

After searching on the Internet, we can make some changes based on the second way of writing (the first way of expanding multiple variables for functions feels a bit bad) and add a parameter as Fixed intervals must be executed

function throttle(method,delay,duration){
  var timer=null, begin=new Date();
  return function(){
    var context=this, args=arguments, current=new Date();;
    clearTimeout(timer);
    if(current-begin>=duration){
       method.apply(context,args);
       begin=current;
    }else{
      timer=setTimeout(function(){
        method.apply(context,args);
      },delay);
    }
  }
}
Copy after login

In this way, each time we judge how long the interval is, if it exceeds the set time, it will be executed immediately. Try the effect with the example just now

window.onresize=throttle(resizehandler,100,200);
Copy after login

Detailed explanation of JavaScript function throttling concepts and usage examples

Sure enough, it is neither executed frequently nor executed at the end

I hope this article will be helpful to everyone in JavaScript programming.

For more detailed explanations of JavaScript function throttling concepts and usage examples, please pay attention to the PHP Chinese website!



Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn

Hot AI Tools

Undresser.AI Undress

Undresser.AI Undress

AI-powered app for creating realistic nude photos

AI Clothes Remover

AI Clothes Remover

Online AI tool for removing clothes from photos.

Undress AI Tool

Undress AI Tool

Undress images for free

Clothoff.io

Clothoff.io

AI clothes remover

Video Face Swap

Video Face Swap

Swap faces in any video effortlessly with our completely free AI face swap tool!

Hot Tools

Notepad++7.3.1

Notepad++7.3.1

Easy-to-use and free code editor

SublimeText3 Chinese version

SublimeText3 Chinese version

Chinese version, very easy to use

Zend Studio 13.0.1

Zend Studio 13.0.1

Powerful PHP integrated development environment

Dreamweaver CS6

Dreamweaver CS6

Visual web development tools

SublimeText3 Mac version

SublimeText3 Mac version

God-level code editing software (SublimeText3)

What should I do if I encounter garbled code printing for front-end thermal paper receipts? What should I do if I encounter garbled code printing for front-end thermal paper receipts? Apr 04, 2025 pm 02:42 PM

Frequently Asked Questions and Solutions for Front-end Thermal Paper Ticket Printing In Front-end Development, Ticket Printing is a common requirement. However, many developers are implementing...

Who gets paid more Python or JavaScript? Who gets paid more Python or JavaScript? Apr 04, 2025 am 12:09 AM

There is no absolute salary for Python and JavaScript developers, depending on skills and industry needs. 1. Python may be paid more in data science and machine learning. 2. JavaScript has great demand in front-end and full-stack development, and its salary is also considerable. 3. Influencing factors include experience, geographical location, company size and specific skills.

Demystifying JavaScript: What It Does and Why It Matters Demystifying JavaScript: What It Does and Why It Matters Apr 09, 2025 am 12:07 AM

JavaScript is the cornerstone of modern web development, and its main functions include event-driven programming, dynamic content generation and asynchronous programming. 1) Event-driven programming allows web pages to change dynamically according to user operations. 2) Dynamic content generation allows page content to be adjusted according to conditions. 3) Asynchronous programming ensures that the user interface is not blocked. JavaScript is widely used in web interaction, single-page application and server-side development, greatly improving the flexibility of user experience and cross-platform development.

How to merge array elements with the same ID into one object using JavaScript? How to merge array elements with the same ID into one object using JavaScript? Apr 04, 2025 pm 05:09 PM

How to merge array elements with the same ID into one object in JavaScript? When processing data, we often encounter the need to have the same ID...

How to achieve parallax scrolling and element animation effects, like Shiseido's official website?
or:
How can we achieve the animation effect accompanied by page scrolling like Shiseido's official website? How to achieve parallax scrolling and element animation effects, like Shiseido's official website? or: How can we achieve the animation effect accompanied by page scrolling like Shiseido's official website? Apr 04, 2025 pm 05:36 PM

Discussion on the realization of parallax scrolling and element animation effects in this article will explore how to achieve similar to Shiseido official website (https://www.shiseido.co.jp/sb/wonderland/)...

The difference in console.log output result: Why are the two calls different? The difference in console.log output result: Why are the two calls different? Apr 04, 2025 pm 05:12 PM

In-depth discussion of the root causes of the difference in console.log output. This article will analyze the differences in the output results of console.log function in a piece of code and explain the reasons behind it. �...

Is JavaScript hard to learn? Is JavaScript hard to learn? Apr 03, 2025 am 12:20 AM

Learning JavaScript is not difficult, but it is challenging. 1) Understand basic concepts such as variables, data types, functions, etc. 2) Master asynchronous programming and implement it through event loops. 3) Use DOM operations and Promise to handle asynchronous requests. 4) Avoid common mistakes and use debugging techniques. 5) Optimize performance and follow best practices.

How to implement panel drag and drop adjustment function similar to VSCode in front-end development? How to implement panel drag and drop adjustment function similar to VSCode in front-end development? Apr 04, 2025 pm 02:06 PM

Explore the implementation of panel drag and drop adjustment function similar to VSCode in the front-end. In front-end development, how to implement VSCode similar to VSCode...

See all articles