2017-11-13 5 views
3

지시문이 ng-repeat 인 여기에서 읽은 (performance of $interpolate vs ng-repeat and one time binding) 1 회 바인딩은 성능면에서 거의 동일합니다. 이게 옳지 않다면 나를 바로 잡아주세요!1 회 바인딩을 사용한 ng-repeat - 성능에 미치는 영향을 추적합니까?

즉, ng-repeat에 1 회 바인딩을 사용하면 track by 속성에 값이 추가되지 않습니다. 또는 실제로 ng-repeat은 여전히 ​​$$hashKey에 색인을 생성 할 것이기 때문에 실제로 성능면에서 도움이됩니까?

답변

1

즉, ng-repeat에서 일회성 바인딩을 사용할 때 속성 트랙 by는 값을 추가하지 않는다는 의미입니다.

track by과 일회성 바인딩 간에는 상관 관계가 없습니다.

  • 바인딩 전문가가
  • 카운트 감소 한 번
  • track by 목록이 서버에서 업데이트와 변화가 (항목의 id에 따라 말할 수)
자신 없습니다 일단 DOM을 다시 렌더링하지 않습니다

번으로 바인딩 ng-repeat ae ng-repeat="friend in ::friends"은 일단 안정화되면 friends의 재 계산을 중지합니다 (첫 번째 다이제스트주기 후 (표현식 결과가 정의되지 않은 값인 경우).

<li ng-repeat="friend in ::friends ">{{friend.name}}</li> 

과 : 예를 들어

$scope.friends = [{ 
    id: 0, 
    name: 'Ben' 
    }]; 

    $timeout(function(){ 
    $scope.friends.push({ 
    id: 3, 
    name: 'Chen' 
    }); 
    },1000); 

결과 :

당신은 볼 수 Ben하지만 한 시간이 정지 바인딩 때문에 일초 지연 후 변화가 없다 ng-repeat watcher. 일반적으로 고정 목록에 사용합니다. 목록 항목은 항목 자체에 의지하지에 대한

Demo 1

BTW, 그것을 작동합니다.


한 번 $$hashKey

제거되지 않습니다 바인딩하지만 당신은 쓸 수 있습니다 :

<li ng-repeat="friend in ::friends track by friend.id"> 

Demo 2

+0

실제로 사용할 때 ('것을 NG-repeat' 의미 'track by '없이 일회성 바인딩) 모든 객체에'$$ hashKey' 속성을 추가함으로써 과도한 작업을하고 있습니다. 왜냐하면리스트는 안정적으로 간주되면 보이지 않기 때문입니다. – SimonSimCity

+0

@SimonSimCity 전혀 아닐 때, 한 번 바인딩하면 'ng-repeat'항목 수에서 watch가 삭제됩니다. 그래서 당신이 새로운 아이템을 추가/제거한다면 아무 일도 일어나지 않을 것입니다. 다른 쪽에서'track by'는 아이템의 DOM을 다시 렌더링하지 않습니다 ** content ** 아이템의 id가 그대로 유지되는 경우 –

+0

동의합니다.따라서 일회성 바인딩을 사용할 때는 '$$ hashKey'생성이 불필요하지만 뷰를 안정화하는 데 필요하지 않습니다 (데이터가 두 번의 '$ digest'주기 사이에서 변경되지 않도록해야합니다). 이 후에는 관찰자가 제거되고 새 항목이나 순서가 변경되지 않습니다. 'friend in :: friends'라는 수단은 여전히'$$ hashKey'를 생성해야하므로'track by'를 여기에 추가하면 성능이 향상 될 것입니다. 맞습니까? – SimonSimCity