Fix CPU issues by removing constant digesting. We do so by:

- Fixing the title and description (meta) to only respond to a rootScope watch, rather than using a timer
  - Change the tabs listening code to be completely self contained
This commit is contained in:
Joseph Schorr 2015-04-22 13:16:10 -04:00
parent d4b593cada
commit 31389b9974
5 changed files with 151 additions and 169 deletions

View file

@ -4,72 +4,36 @@
angular.module('quay').factory('MetaService', ['$interpolate', 'Config', '$rootScope', '$interval',
function($interpolate, Config, $rootScope, $interval) {
var metaService = {};
var intervals = [];
var interpolate = function(page, expr, callback) {
var previous = '';
var interpolate = function(page, expr) {
if (!expr) {
return null;
}
var currentInterval = $interval(function() {
var inter = $interpolate(expr, true, null, true);
var result = inter(page.scope)
var inter = $interpolate(expr, true, null, true);
if (!inter) {
return null;
}
if (previous && result != previous) {
$interval.cancel(currentInterval);
}
previous = result;
callback(result);
}, 500);
intervals.push(currentInterval);
return inter(page.scope);
};
var initial = function(value, default_value, callback) {
for (var i = 0; i < intervals.length; ++i) {
$interval.cancel(intervals[i]);
metaService.getTitle = function(page) {
if (!page || !page.$$route) {
return null;
}
intervals = [];
if (!value) {
callback(default_value);
return;
}
if (value.indexOf('{{') < 0) {
callback(default_value);
return;
}
callback('Loading...');
};
metaService.getInitialTitle = function(page, callback) {
var route = page.$$route;
initial(route && route.title, Config.REGISTRY_TITLE_SHORT, callback);
return interpolate(page, route && route.title);
};
metaService.getInitialDescription = function(page, callback) {
var route = page.$$route;
initial(route && route.description, Config.REGISTRY_TITLE_SHORT, callback);
};
metaService.getTitle = function(page, callback) {
var route = page.$$route;
if (!route || !route.title || route.title.indexOf('{{') < 0) {
return;
metaService.getDescription = function(page) {
if (!page || !page.$$route) {
return null;
}
interpolate(page, route.title, callback);
};
metaService.getDescription = function(page, callback) {
var route = page.$$route;
if (!route || !route.description || route.description.indexOf('{{') < 0) {
return;
}
interpolate(page, route.description, callback);
return interpolate(route && route.description);
};
return metaService;