Ratelimit progressbar update to save some cpu time

This commit is contained in:
shortcutme 2017-03-02 23:39:31 +01:00
parent 52ed170292
commit 36db8a4dc9
No known key found for this signature in database
GPG key ID: 5B63BAE6CB9613AE
3 changed files with 50 additions and 3 deletions

View file

@ -7,7 +7,8 @@ class Loading
setProgress: (percent) ->
if @timer_hide
clearInterval @timer_hide
$(".progressbar").css("width", percent*100+"%").css("opacity", "1").css("display", "block")
RateLimit 200, ->
$(".progressbar").css("width", percent*100+"%").css("opacity", "1").css("display", "block")
hideProgress: ->
console.log "hideProgress"

View file

@ -10,6 +10,35 @@
/* ---- src/Ui/media/lib/RateLimit.coffee ---- */
(function() {
var call_after_interval, limits;
limits = {};
call_after_interval = {};
window.RateLimit = function(interval, fn) {
if (!limits[fn]) {
call_after_interval[fn] = false;
fn();
return limits[fn] = setTimeout((function() {
if (call_after_interval[fn]) {
fn();
}
delete limits[fn];
return delete call_after_interval[fn];
}), interval);
} else {
return call_after_interval[fn] = true;
}
};
}).call(this);
/* ---- src/Ui/media/lib/ZeroWebsocket.coffee ---- */
@ -555,7 +584,9 @@ jQuery.extend( jQuery.easing,
if (this.timer_hide) {
clearInterval(this.timer_hide);
}
return $(".progressbar").css("width", percent * 100 + "%").css("opacity", "1").css("display", "block");
return RateLimit(200, function() {
return $(".progressbar").css("width", percent * 100 + "%").css("opacity", "1").css("display", "block");
});
};
Loading.prototype.hideProgress = function() {
@ -648,6 +679,7 @@ jQuery.extend( jQuery.easing,
}).call(this);
/* ---- src/Ui/media/Notifications.coffee ---- */
@ -1493,4 +1525,4 @@ jQuery.extend( jQuery.easing,
window.wrapper = new Wrapper(ws_url);
}).call(this);
}).call(this);

View file

@ -0,0 +1,14 @@
limits = {}
call_after_interval = {}
window.RateLimit = (interval, fn) ->
if not limits[fn]
call_after_interval[fn] = false
fn() # First call is not delayed
limits[fn] = setTimeout (->
if call_after_interval[fn]
fn()
delete limits[fn]
delete call_after_interval[fn]
), interval
else # Called within iterval, delay the call
call_after_interval[fn] = true