If you slide the selector for a range value, the executor function is called continuously, even though it’s going to be re-called again and overwrite the output of the previous call. This is problematic for any app that makes a remote call, since a user can effectively DOS the remote server by slowly dragging the range selector around.
Please add a short delay before calling executor()
, like this pattern that is often used in web apps (pseudo-JavaScript):
var executorTimer = null;
range.onchange = function () {
clearTimeout( executorTimer );
executorTimer = setTimeout( executor, 250 );
};
1 Like
This is an old post, but I used it to solve the issue I’m having. I rename the executor function to executor2 and then create an executor timeout like what you show and it gives the intended effect:
var timeout = null;
var executor = function(args, success, failure) {
clearTimeout(timeout);
timeout = setTimeout(function () {
executor2(args, success, failure);
}, 500);
}
var executor2 = function(args, success, failure) {
// Normal code here ...
success(volumes);
}
So the code above gives me a half second delay between changing a range value and when it actually renders. The clearTimeout is important in that it only keeps the latest timeout callback.
Thanks @EthanKinney, that worked really well.