Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
$scope.myVar = 2 * 2; $scope.$watch('myVar', function() { alert('myVar has changed!'); });
'myVar' будет высчитываться минимум один-два раза при каждом цикле $digest.
Условно говоря, время выполнения цикла $digest = количество наблюдателей * время их выполнения.Можно умножить на кол-во циклов, что-б получить время выполнения $digest, т.к. при плохом использовании $watch, можно увеличить кол-во циклов в каждом $digets.
используйте ng-switch, чтобы удалить скрытые элементы из самого DOM.Так же можно использовать ng-if
Каждый фильтр в AngularJS выполняется минимум один-два раза при каждом цикле $digestНе один-два, а ровно один раз в каждом цикле, и то если это stateful фильтр. А вызов (обычного) «stateless» фильтра будет зависеть — изменилось ли входящее значение.
Сократите количество обращений к серверу, модифицировав передаваемые данные.Так же можно использовать useApplyAsync
Так же не сказано про самую главную «оптимизацию» — компонентный подход
Angular'е, никаких дополнительных $rootScope на каждую директиву не создаетсяШтатно не создается, но можно сделать новый rootScope вручную (не через сервис), и у него будет свой $digest цикл. Правильно это или нет, каждый принимает решение за себя, но некоторые это используют.
newRootScope = new $rootScope.constructor()
Вся целостность приложения ломается
Как вы в таком случае намереваетесь налаживать какое-то взаимодействие между этими компонентами?Я не намереваюсь, я использую Angular Light и у меня таких проблем нет.
Про удачность апи это да. ждем 2-й ангуляр :)Ангуляр 2 ещё не зарелизился, а в нем уже не все
scope:'root'/'isolate' — в документации написано, что аргументы могут быть true/'isolate', но в ваших примерах используется 'root', который ведет себя как-то по-особенному, а все остальное (true, 'isolate', 'foo') ведет одинаково.(true, 'isolate', 'foo') ведет одинаково.— Если scope не указан, то используется родительский scope.
выполняется минимум один-два разаКак-то очень туманно. Ценность такой информации под вопросом. Сам я всегда проверяю сколько раз выполняются фильтры и т.п. Выполняется столько сколько нужно, никаких скрытых повторных выполнений не встречал.
ватчер проверяется минимум два разаЭто так, хотя зачастую достаточно и одного прохода, например ватчи которые создаются декларативным {{биндингом}} или если подключить контрол input — в них ватчи используется только для отслеживания изменений, и они не меняют модель (в input-e ватч не меняет модель, это делает директива вне ватча). А раз они не меняют модель, то и второй проход $digest не нужен, именно так и работает в Angular Light — если сделать форму с input и {{биндингом}}, то видно что при вводе текста происходит только один проход.
Оптимизация AngularJS: рабочие примеры