Repository: aurora Updated Branches: refs/heads/master 64c00f105 -> d6b2c7e33
Only process instances if there's been a change. The `true` parameter to `scope.$watch` tells Angular to only execute the supplied function if the watched data has changed. Given our 15s polling interval is likely less than time it takes for any progress to be made on an update, this removes the majority of (no-op) DOM operations. Testing Done: Left tab open continually polling a job with ~3000 instances, confirmed that memory usage did not grow beyond ~200MB. Bugs closed: AURORA-1345 Reviewed at https://reviews.apache.org/r/37956/ Project: http://git-wip-us.apache.org/repos/asf/aurora/repo Commit: http://git-wip-us.apache.org/repos/asf/aurora/commit/d6b2c7e3 Tree: http://git-wip-us.apache.org/repos/asf/aurora/tree/d6b2c7e3 Diff: http://git-wip-us.apache.org/repos/asf/aurora/diff/d6b2c7e3 Branch: refs/heads/master Commit: d6b2c7e33c3d7eed8fb4c223e5412f03cf3f3312 Parents: 64c00f1 Author: Joshua Cohen <[email protected]> Authored: Wed Sep 2 13:15:48 2015 -0500 Committer: Joshua Cohen <[email protected]> Committed: Wed Sep 2 13:15:48 2015 -0500 ---------------------------------------------------------------------- src/main/resources/scheduler/assets/js/directives.js | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/aurora/blob/d6b2c7e3/src/main/resources/scheduler/assets/js/directives.js ---------------------------------------------------------------------- diff --git a/src/main/resources/scheduler/assets/js/directives.js b/src/main/resources/scheduler/assets/js/directives.js index c02c26f..ef94ade 100644 --- a/src/main/resources/scheduler/assets/js/directives.js +++ b/src/main/resources/scheduler/assets/js/directives.js @@ -165,17 +165,18 @@ }, link: function (scope, element, attrs) { scope.$watch('instances', function () { - var parent = angular.element('<div></div>'); if (!scope.instances || scope.instances.length === 0) { return; } + var cssClasses = [ 'instance-grid', scope.size ]; var aborted = scope.status === JobUpdateStatus.ABORTED; if (aborted) { cssClasses.push(ABORTED.toLowerCase()); } - var list = angular.element('<ul class="' + cssClasses.join(' ') + '"></ul>'); + var parent = angular.element('<div></div>'); + var list = angular.element('<ul class="instance-grid ' + scope.size + '"></ul>'); scope.instances.forEach(function (i) { var n = i.instanceId; @@ -199,7 +200,7 @@ parent.append(list); element.html(parent.html()); $compile(element)(scope); - }); + }, true); } }; });
