Итак, я придумал несколько решений для этого, и я все еще не совсем уверен, что лучше. Сначала для справки есть один подобный вопрос, который я мог найти, хотя он немного старый. Здесь это для тех, кто читает это позже: Просмотр изменений размеров в Angular
Цель
У меня есть часть моего приложения, в котором требуются элементы повышенной чувствительности. Я хочу, чтобы самый быстрый, наиболее привлекательный способ сделать это на уровне интерфейса/указателя без необходимости явно транслируемых событий изменения.
Вариант один: директива
Простая директива может записывать размеры в каждый цикл дайджеста (и изменять размер)
return {
scope: {
size: '=ngSize'
},
link: function($scope, element, attrs) {
var windowEl = angular.element($window),
handler = function() {
if ($scope.size &&
element.outerWidth() === $scope.size.width &&
element.outerHeight() === $scope.size.height) return false;
$scope.size = {
width: element.outerWidth(),
height: element.outerHeight()
};
};
windowEl.on('resize', function() {
$scope.$apply(handler);
});
$root.$watch(function() { return [element.outerWidth(), element.outerHeight()] }, handler, true);
}
};
Проблема: Изменение не распространяется достаточно быстро, а визуальное отставание заметно.
Решение: Использование интервального вызова
Вариант второй: $interval
Я попробовал одно и то же с вызовом $interval, и это сработало, но использование процессора было неожиданно высоким даже после того, как я инвертировал управление и отслеживал элементы в простой корневой коллекции, наблюдаемой по значению (избегая одновременных таймеров, созданных несколькими экземплярами директивы).
Помимо некоторой проблемы, связанной с GC, в моей среде (я не вижу ничего, что говорит об этом в настоящее время), может быть, есть лучший подход к созданию такого рода компоновки жидкости?
Предлагаемое решение/вопрос
Моя первая мысль - это способ создать параллельный цикл $digest, чтобы эффективно отслеживать DOM в целом для любых визуальных изменений. Можно ли эффективно выполнять итерацию по всем вычисленным стилям, например, для получения дешевого хэша, который можно наблюдать по значению? Что-то, что может быть вызвано относительно недорогим каждый раз, когда соответствующий вычисленный стиль добавляется и/или изменяется?
Прежде чем я буду создавать и профилировать его, может ли кто-нибудь прокомментировать, насколько он реалистичен или просто имеет смысл абстрагироваться/реорганизовывать триггеры изменения размера в первую очередь?
Любые другие идеи относительно предпочтительного способа выполнить это в 1.2.9?
[править] Альтернативный, возможно, более простой вопрос: можно ли обеспечить реалистичную частоту обновления 1-200 мс с помощью Javascript с помощью вычислительной эффективности? Если это так, будет ли это путь Angular $или может быть эффективнее реализация "VanillaJS"?