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:
parent
d4b593cada
commit
31389b9974
5 changed files with 151 additions and 169 deletions
|
@ -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;
|
||||
|
|
Reference in a new issue