$ whoami
Mark Zubovsky
UI/UX, frontender, backender
— Недавнее —
Product, UI, Frontend (HTML5 stack, Angular.js),
Backend (Node.js, MySQL, Redis)
Frontend (HTML5 stack, Angular.js)
Тёмная сторона
Very opinionated
Мало туториалов, мало примеров в оф. документации
Dirty-check loop ($apply / $digest)
Тормоза при кол-ве $watchers > 2000
Factory vs Service vs Provider
Неочевидности
Dirty-check loop
Бюджет по времени, в идеале до 16.7мс
Блокирующая операция
Луп проходит по всем скоупам и вотчерам
$scope.$apply === $rootScope.$apply
$scope.$digest — пройтись только по текущему скоупу и дочерним. Лучше не использовать.
$watchers > 2000
Решение:
Перепроектировать UI
(разделение информации на несколько блоков)
Свет в конце туннеля — ES6 Object.observe
(уже в Chrome stable v29)
Неочевидности
Есть элемент в DOM с контроллером, значит он работает.
(ng-show/hide не удаляют контроллер)
Использовать объект как модель
(data = {}, но не data = '' // примитивы)
При обёртке внешних плагинов через директивы, не забывать удалять вручную доп. элементы, эвенты и т.п.
app.directive('MyCalendar', function() {
return {
restrict: 'A',
link: function (scope, elem, attrs) {
// ...
elem.attachMyJQueryCalendar();
scope.$on('$destroy', function() {
elem.detachMyJQueryCalendar();
});
}
}
});