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)

STU 10.02.2014 11:04

Цитата:

Сообщение от nerv_ (Сообщение 293926)
Делаю вывод: это может способствовать улучшению производительности директивы ng-repeat.

Прошу прощения, но я не совсем понимаю как оно способствует улучшению производительности?
По-умолчанию по-моему работает логично:
If no tracking function is specified the ng-repeat associates elements by identity in the collection. It is an error to have more than one tracking function to resolve to the same key.
Переводить на стал т.к. лучше отписать оригиналом, чем ломать его своим переводом.

nerv_ 10.02.2014 11:53

Цитата:

Сообщение от STU
Переводить на стал т.к. лучше отписать оригиналом, чем ломать его своим переводом.

я сломаю:
Цитата:

If no tracking function is specified the ng-repeat associates elements by identity in the collection. It is an error to have more than one tracking function to resolve to the same key.
Если нет функция отслеживания, это указывает, что "ng-repeat" связывает элементы по идентичности в коллекции. Ошибка, если имеется более чем одна отслеживающая функция возвращающая тот же самый ключ.

Что такое "идентичность"? В рамках ангуляра отслеживание изменений по значению. А что такое отслеживание изменений по значению для массива, в котором лежат объекты? :)

та самая ошибка http://learn.javascript.ru/play/1LGDbc

тем не менее, этот пример http://learn.javascript.ru/play/Qmjpf показывает, что ангуляр пихает ключи в объекты для отслеживания (что не всегда уместно)

Проще всего исходники посмотреть или подебажить, но лениво :)

STU 10.02.2014 13:10

Цитата:

Сообщение от nerv_ (Сообщение 296888)
А что такое отслеживание изменений по значению для массива, в котором лежат объекты? :)

Спасибо, стало понятней. Фактически мы просто избавляемся от лишних вычислений, особенно если у нас массив объектов.

nerv_ 17.07.2014 16:55

$apply and $digest are both methods on AngularJS scopes that allow you to manually trigger the updates to bound properties on your scopes.

Shitbox2 21.07.2014 16:38

Черт знает. Если посмотреть исходники
if (trackByExp) {
  trackByExpGetter = $parse(trackByExp);
  trackByIdExpFn = function(key, value, index) {
  // assign key, value, and $index to the locals so that they can be used in hash functions
    if (keyIdentifier) hashFnLocals[keyIdentifier] = key;
      hashFnLocals[valueIdentifier] = value;
      hashFnLocals.$index = index;
      return trackByExpGetter($scope, hashFnLocals);
    };
} else {
  trackByIdArrayFn = function(key, value) {
    return hashKey(value);
  };
  trackByIdObjFn = function(key) {
    return key;
  };
}

то в одном случае будет всегда срабатывать
trackByExpGetter($scope, hashFnLocals);

в другом —
hashKey(value);

Не уверен, что первая быстрее...

nerv_ 29.07.2014 16:36

Shitbox2, ты хотя бы написал, что ведешь речь о ng-repeat =)

Цитата:

Сообщение от Shitbox2
Не уверен, что первая быстрее...

ну смотри, в случае
ng-repeat="item in array"

у тебя получается, что: если item is object, то к каждому item будет впиндюрен (непереводимое слово :) $$hashKey + создана функция слежения (привет Бараку Обаме)
а в кейсе вида
ng-repeat="item in array track by item.id"

будет создана только функция слежения

---

А еще я забавный паттерн "изобрел" :D для сборки мусора:
1. в директиве
function(scope, element, attrubutes) {
    element.bind('$destroy', scope.$watch(watcher, handler));
}

2. в контроллере
function($scope) {
    $scope.$on('$destroy', $scope.$watch(watcher, handler));
}

и все счастливы =)

melky 29.07.2014 16:37

nerv_, что думаешь насчёт https://github.com/Pasvaz/bindonce ?

я глянул демку, но особо не вникал

nerv_ 29.07.2014 16:48

Цитата:

Сообщение от melky
я глянул демку

я тоже глянул. И что-то разницы не увидел =)

melky 29.07.2014 17:00

Цитата:

Сообщение от nerv_ (Сообщение 323278)
я тоже глянул. И что-то разницы не увидел =)

то бишь ввод текста в поле и там и там тормозит, или нигде не тормозит?)

... а как бы убрать лаг при добавлении 2000 записей? пагинация\бесконечный скролл?

как можно разбить добавление элементов внутри ng-repeat по итерациям setTimeout ?


не шарю :(

nerv_ 29.07.2014 22:02

Цитата:

Сообщение от melky
то бишь ввод текста в поле и там и там тормозит, или нигде не тормозит?)

тормозит везде

Цитата:

Сообщение от melky
... а как бы убрать лаг при добавлении 2000 записей? пагинация\бесконечный скролл?

не делать 2000 записей. Пагинация. Можешь взять мой модуль.
либо оптимизации


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