Javascript-форум (https://javascript.ru/forum/)
-   Angular.js (https://javascript.ru/forum/angular/)
-   -   Angular: Performance optimization / Оптимизация производительности (https://javascript.ru/forum/angular/42001-angular-performance-optimization-optimizaciya-proizvoditelnosti.html)

FireVolkhov 23.08.2014 09:19

1. Использовать {{::value}} синтаксис, когда нет необходимости обновлять данные (доступно в 1.3.0 beta)
Пример

2. Делать больше DOM манипуляций в директиве
Вместо
<div ng-show=”something”></div>
$scope.something = false;
$scope.someMethod = function () {
  $scope.something = true;
};

Использовать
var menu = $element.find(‘ul’);
menu.hide();
$scope.someMethod = function () {
  menu.show();
};


3. По минимуму использовать фильтры в DOM
Вместо
{{ array | filter : expression : comparator }}

Использовать
scope.result = $filter('filter')(array, expression, comparator);


4. В часто вызываемых функциях mousemove, mouseover, mouseout и т.п. не использовать лишний раз $apply или $digest

Aetae 23.08.2014 11:12

FireVolkhov, не проще тогда просто выкинуть angular на мороз и сразу писать по-человечески?)
В чём прикол фич которые всё равно нельзя использовать?)

FireVolkhov 23.08.2014 18:40

"и сразу писать по-человечески?)" это как?:blink:
Прикол фитч в том, чтобы использовать их вмеру

nerv_ 24.08.2014 00:01

Цитата:

Сообщение от FireVolkhov
1. Использовать {{::value}} синтаксис, когда нет необходимости обновлять данные (доступно в 1.3.0 beta)

не факт, что в stable будет эта возможность

Цитата:

Сообщение от FireVolkhov
2. Делать больше DOM манипуляций в директиве

Или неудачный пример... или... в чем смысл? Все равно watcher вешать и делать тоже самое, что и директивы ng-show|ng-hide. Т.е. выигрыша нет.

Цитата:

Сообщение от FireVolkhov
4. В часто вызываемых функциях mousemove, mouseover, mouseout и т.п. не использовать лишний раз $apply или $digest

уже писали)

---

Цитата:

Сообщение от Aetae
сразу писать по-человечески?)

научи =)

melky 24.08.2014 01:34

Цитата:

Сообщение от nerv_
научи =)

Node.appendChild

Node.insertAdjacentHTML

... всему вас нужно учить :)


PS вообще, ни разу ещё не страдал от фильтров в DOM (профилирование, йопт)

больше всего ненавижу ng-view (или ui-view) или ng-repeat. и ещё $watch - обычно вырубаю его , где могу (т.е. где оно не нужно... а оно не нужно много где)

FireVolkhov 24.08.2014 12:45

Цитата:

Сообщение от nerv_
Или неудачный пример... или... в чем смысл? Все равно watcher вешать и делать тоже самое, что и директивы ng-show|ng-hide. Т.е. выигрыша нет.

Да пример может не совсем удачный вот другой, суть выходит сводится к "использовать минимум watcher'ов", стараться не использовать watcher для коммуникаций внутри директивы, только для работы с другими директивами, контроллерами, сервисами.

nerv_ 24.08.2014 23:51

Цитата:

Сообщение от FireVolkhov
Да пример может не совсем удачный вот другой

При таком примере "теряется" MVC - так я не могу управлять видимостью из модели. На мой взгляд ценность такой директивы невелика)

Кроме того
content.toggleClass('ng-hide', !show);

STEVER 12.04.2015 23:07

я вот тут статью в тему перевел - "Оптимизируем AngularJS. Подробный разбор."
от Глеба Бахмутова

FireVolkhov 07.05.2015 13:49

nerv_,
Цитата:

Сообщение от nerv_
Цитата:

Сообщение от FireVolkhov
1. Использовать {{::value}} синтаксис, когда нет необходимости обновлять данные (доступно в 1.3.0 beta)

не факт, что в stable будет эта возможность

Стало частью stable можно дописывать

UPD:
Не делать многократного вложение директив в директивы, если нужна повторяющаяся логика использовать вложенные контроллеры
angular.module '...'
	.directive 'dateTextfield', ($controller, ...) ->
		link: (scope, elem, attrs) ->
			commonHintCtrl = $controller 'CommonHintCtrl',
				$scope: scope
				...

mikekelvin 18.07.2022 11:35

Angular performance optimization works well when we use lazy modules, lazy modules helps to break the large chunks of codes into small so Angular JS would be optimized.


Часовой пояс GMT +3, время: 13:09.