From 2d772eaaa8dfe6a8aeba9a67b50fafd2c74c0c0c Mon Sep 17 00:00:00 2001 From: Christoph Wurst Date: Thu, 14 Apr 2016 11:12:15 +0200 Subject: [PATCH] Debounce heartbeat ajax calls to lower the number of requests fixes #22397 --- core/js/js.js | 12 +++++++++--- core/js/tests/specs/coreSpec.js | 4 +++- 2 files changed, 12 insertions(+), 4 deletions(-) diff --git a/core/js/js.js b/core/js/js.js index 598e0dcd18..802b5de7e1 100644 --- a/core/js/js.js +++ b/core/js/js.js @@ -1498,9 +1498,15 @@ function initCore() { interval = maxInterval; } var url = OC.generateUrl('/heartbeat'); - setInterval(function(){ - $.post(url); - }, interval * 1000); + var heartBeatTimeout = null; + var heartBeat = function() { + clearTimeout(heartBeatTimeout); + heartBeatTimeout = setInterval(function() { + $.post(url); + }, interval * 1000); + }; + $(document).ajaxComplete(heartBeat); + heartBeat(); } // session heartbeat (defaults to enabled) diff --git a/core/js/tests/specs/coreSpec.js b/core/js/tests/specs/coreSpec.js index f18ecbc1a4..09271f1ab9 100644 --- a/core/js/tests/specs/coreSpec.js +++ b/core/js/tests/specs/coreSpec.js @@ -305,6 +305,7 @@ describe('Core base tests', function() { counter++; xhr.respond(200, {'Content-Type': 'application/json'}, '{}'); }); + $(document).off('ajaxComplete'); // ignore previously registered heartbeats }); afterEach(function() { clock.restore(); @@ -312,6 +313,7 @@ describe('Core base tests', function() { window.oc_config = oldConfig; routeStub.restore(); $(document).off('ajaxError'); + $(document).off('ajaxComplete'); }); it('sends heartbeat half the session lifetime when heartbeat enabled', function() { /* jshint camelcase: false */ @@ -340,7 +342,7 @@ describe('Core base tests', function() { clock.tick(20 * 1000); expect(counter).toEqual(2); }); - it('does no send heartbeat when heartbeat disabled', function() { + it('does not send heartbeat when heartbeat disabled', function() { /* jshint camelcase: false */ window.oc_config = { session_keepalive: false,