|
@@ -244,6 +244,9 @@
|
|
|
|
|
|
}
|
|
|
|
|
|
+ // Limit to max one state update per X ms
|
|
|
+ handleStateMessage = debounce( handleStateMessage, 200 );
|
|
|
+
|
|
|
/**
|
|
|
* Creates the preview iframes.
|
|
|
*/
|
|
@@ -340,6 +343,37 @@
|
|
|
|
|
|
}
|
|
|
|
|
|
+ /**
|
|
|
+ * Limits the frequency at which a function can be called.
|
|
|
+ */
|
|
|
+ function debounce( fn, ms ) {
|
|
|
+
|
|
|
+ var lastTime = 0,
|
|
|
+ timeout;
|
|
|
+
|
|
|
+ return function() {
|
|
|
+
|
|
|
+ var args = arguments;
|
|
|
+ var context = this;
|
|
|
+
|
|
|
+ clearTimeout( timeout );
|
|
|
+
|
|
|
+ var timeSinceLastCall = Date.now() - lastTime;
|
|
|
+ if( timeSinceLastCall > ms ) {
|
|
|
+ fn.apply( context, args );
|
|
|
+ lastTime = Date.now();
|
|
|
+ }
|
|
|
+ else {
|
|
|
+ timeout = setTimeout( function() {
|
|
|
+ fn.apply( context, args );
|
|
|
+ lastTime = Date.now();
|
|
|
+ }, ms - timeSinceLastCall );
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
})();
|
|
|
|
|
|
</script>
|