AngularJS - Какая сфера лучше по производительности?Object.key или какая-то переменная? - PullRequest
0 голосов
/ 20 ноября 2018

Допустим, мне нужно хранить информацию о клиентах, а для управления двусторонним связыванием я буду использовать $scope здесь.Поэтому я сомневаюсь, какой подход лучше?

$scope.firstname = "foo";
$scope.lastname = "bar";
$scope.cellno = "1234567890";
$scope.email = "foobar@example.com";

ИЛИ

$scope.customerDetailsObj = {};
$scope.customerDetailsObj.firstname = "foo";
$scope.customerDetailsObj.lastname = "bar";
$scope.customerDetailsObj.cellno = "1234567890";
$scope.customerDetailsObj.email = "foobar@example.com";`

Мне было интересно об этом, потому что у меня большое угловое приложениеи иногда количество наблюдателей в области видимости выходит за пределы 1500. Я использую расширение Chrome для просмотра количества наблюдателей.

Пожалуйста, поделитесь своими взглядами.Спасибо.

Ответы [ 2 ]

0 голосов
/ 28 ноября 2018

По моему мнению и согласно angularjs guide первый подход (привязка к свойствам напрямую) будет более эффективным. Выдержка из гида:

Грязная проверка может быть сделана с тремя стратегиями: содержание коллекции и по значению. Стратегии различаются по видам изменений, которые они обнаруживают, и в их характеристиках.

  • Просмотр по ссылке (scope. $ Watch (watchExpression, listener)) обнаруживает изменение, когда все значение возвращается выражением наблюдения переключается на новое значение. Если значение является массивом или объектом, внутри него изменений не обнаружено. Это самый эффективный стратегия.
  • Просмотр содержимого коллекции (scope. $ WatchCollection (watchExpression, listener)) обнаруживает изменения, которые происходят внутри массив или объект: когда элементы добавляются, удаляются или переупорядочиваются. обнаружение мелкое - оно не попадает во вложенные коллекции. Просмотр содержимого коллекции обходится дороже, чем просмотр ссылка, потому что копии содержимого коллекции должны быть поддерживается. Тем не менее, стратегия пытается минимизировать количество требуется копирование.
  • Отслеживание по значению (scope. $ Watch (watchExpression, listener, true)) обнаруживает любые изменения в произвольно вложенной структуре данных. Это самая мощная стратегия обнаружения изменений, но и самая дорогая. Необходим полный обход вложенной структуры данных на каждом дайджест, и его полная копия должна храниться в памяти.

enter image description here

0 голосов
/ 22 ноября 2018

Говоря только о производительности , Я думаю, вариант 1 (с простыми переменными) более эффективен.

Просмотр равнинысвойства

функция $ watch (), по умолчанию проверяет только равенство ссылок на объекты.Поэтому в каждом $ digest он будет проверять, указывают ли новые и старые значения на один и тот же объект.

Просмотр объектов и массивов

Если вы хотите $ watch() объект, вы должны переключиться на глубокие часы, и это означает, что в каждом $ digest, он будет проверять все дерево, чтобы увидеть, изменились ли структура или значения.Таким образом, чем больше объект, тем дороже проверка.

$ watchGroup (), альтернатива объектам / наблюдателям массива

Если у вас есть группа связанных свойств, таких както есть человек (имя, фамилия, возраст), вы можете определить его как обычные свойства и использовать $ watchGroup () , который работает так же, как обычный $ watch (), но беря списоксвойства смотреть, а не один.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...