#javascript #angularjs #performance #angularjs-ng-repeat
#javascript #angularjs #Производительность #angularjs-ng-repeat
Вопрос:
Вопрос простой, но я уверен, что он обеспечивает дополнительную ценность для разработки приложений.
С точки зрения производительности лучше использовать:
ng-repeat="r in roads", ng-hide="r.distance > 1000"
ИЛИ лучше помещать элементы в массив в контроллере, например:
for (var i in $scope.roads) {
var road = $scope.roads[i];
if (road.distance <= 1000) $scope.roadsToShow.push(road);
}
а затем использовать, просто ng-repeat вот так?
ng-repeat="r in roadsToShow"
Что считается лучшей практикой с точки зрения повышения производительности? Представьте, что объектов в массивах более 1000.
Комментарии:
1. Хорошим вариантом является реализация разбивки на страницы.. Таким образом, вы также повысите производительность своего серверной части
2. Позвольте мне объяснить. Разбивка на страницы предназначена для отображения всех результатов, разделенных на разных страницах. Вопрос в том, ng-повторить все объекты в массиве и показать только то, что мы хотим. ИЛИ поместить то, что мы хотим, в новый массив и ничего не фильтровать в DOM?
3. Второй вариант лучше с точки зрения производительности, потому что angular оценивает массив при каждом цикле дайджеста. Чем меньше элементов, тем быстрее. Также при использовании
ng-show
angular отображает их в DOM, что не требуется в вашей второй реализации4. Отлично. Большинство мнений ведут туда. Спасибо
Ответ №1:
Фильтрация массива будет значительно лучше по нескольким причинам.
Наиболее важным из них является то, что ng-hide
требуется создать внутренний контроль, а часы стоят дорого и могут вызвать узкие места в производительности
Во-вторых, будет меньше узлов dom для рендеринга
Существует множество способов выполнить фильтрацию и в angular.
Не используйте ng-hide
ng-show
ng-if
etc в качестве инструментов фильтрации в ng-repeat
Комментарии:
1. Прохладный. Спасибо за ваше мнение!
Ответ №2:
Лучше фильтровать элементы массива в контроллере или лучше на сервере вместо того, чтобы скрывать их после их визуализации. Если вы фильтруете массив перед его отображением, браузеру не нужно отображать DOM, связанный с элементом, а затем тратить время на его скрытие. Имейте в виду, что using ng-hide
применяет класс CSS display: none
к элементу, поэтому узел существует, но не виден.