AngularJS $watch vs $watch Collection: 어떤 것이 퍼포먼스에 더 좋습니까?
오브젝트 스코프 변수를 감시하기 위해$scope.$watch
와 함께objectEquality
true OR로 설정하다$scope.$watchCollection
더 나은가요?
의 경우$scope
오브젝트 변수(예를 들어 15개의 Atribute, 일부 중첩된 2레벨)는 입력 요소로 갱신되며,ng-model
보기에는, 얼마나 나쁜가$scope.$watch
와 함께objectEquality
로 설정하다.true
피해야 할 큰 일인가요?
이$watchCollection
더 나은 해결책?
Angular의 성능을 향상시킬 수 있는 쉬운 승리를 찾고 있습니다.JS App (아직 v1.2.2에서 벗어나지 못했습니다.)
// ctrl scope var
$scope.filters = {
name: '',
info: {test: '', foo: '', bar: ''},
yep: ''
// etc ...
}
// ctrl watch ?
$scope.$watch('filters', function(newVal, oldVal) {
if(newVal !== oldVal) {
// call with updated filters
}
}, true);
// or ctrl watch collection ?
$scope.$watchCollection('filters', function(newVal, oldVal) {
if(newVal !== oldVal) {
// call with updated filters
}
});
// view input with ng-model
<input type="text" ng-model="filters.name" />
<input type="text" ng-model="filters.info.test" />
<input type="text" ng-model="filters.yep" />
// etc ...
$watch()는 다음에 의해 트리거됩니다.
$scope.myArray = [];
$scope.myArray = null;
$scope.myArray = someOtherArray;
$watchCollection()은 위의 모든 AND에 의해 트리거됩니다.
$scope.myArray.push({}); // add element
$scope.myArray.splice(0, 1); // remove element
$scope.myArray[0] = {}; // assign index to different value
$watch(... true)는 위의 모든 것에 의해 트리거됩니다.
$scope.myArray[0].someProperty = "someValue";
한 가지만 더...
$watch()는 동일한 내용을 가진 배열을 다른 배열로 교체했을 때 실행되는 유일한 배열입니다.예를 들어 다음과 같습니다.
$scope.myArray = ["Apples", "Bananas", "Orange" ];
var newArray = [];
newArray.push("Apples");
newArray.push("Bananas");
newArray.push("Orange");
$scope.myArray = newArray;
다음은 다양한 워치 조합을 모두 사용하고 로그 메시지를 출력하여 트리거된 워치를 나타내는 JSFiddle 예에 대한 링크입니다.
http://jsfiddle.net/luisperezphd/2zj9k872/
그
$watchCollection()
함수는 둘 사이의 일종의 중간 지점이다.$watch()
를 참조해 주세요.vanilla $watch() 함수보다 상세하지만 deep-equality만큼 비싸지는 않습니다.$watch()
기능.예를 들면$watch()
기능,$watchCollection()
물리 오브젝트 참조를 비교하는 것으로 동작합니다만,$watch()
기능,$watchCollection()
는 1레벨 깊이까지 이동하여 컬렉션의 최상위 항목에 대해 얕은 참조 검사를 수행합니다.
$watchCollection
벡터에 최적화되어 있다arrays []
요소를 밀어넣을 수 있습니다.
그리고.$watch
연결 어레이 개체 {}에 적합합니다.
$watchCollection
깊이 변경을 감시하지 않습니다.objectEquality가 false로 설정된 워치와 같습니다.
깊이 구조에 대해 이미 알고 있는 경우 다음과 같이 최적화할 수 있습니다.
// ctrl watch ?
$scope.$watch('filters', function(newVal, oldVal) {
if(newVal !== oldVal) {
// call with updated filters
}
});
// ctrl watch ?
$scope.$watch('filters.info', function(newVal, oldVal) {
if(newVal !== oldVal) {
// call with updated filters
}
});
언급URL : https://stackoverflow.com/questions/26535415/angularjs-watch-vs-watchcollection-which-is-better-for-performance
'source' 카테고리의 다른 글
요청된 리소스 오류에 'Access-Control-Allow-Origin' 헤더가 없습니다. (0) | 2023.03.28 |
---|---|
한 컬렉션에서 다른 컬렉션으로 문서를 옮기다 (0) | 2023.03.28 |
공통 라이브러리를 만드는 스프링 부트 사용 방법 (0) | 2023.03.28 |
AWS EFS의 성능 저하 (0) | 2023.03.28 |
mongoDb에서 인덱스로 어레이 요소를 삭제하려면 어떻게 해야 합니까? (0) | 2023.03.28 |