2013-05-03 3 views
5

d3.js를 통해 데이터를 전달할 때 라이브러리는 데이터를 입력/업데이트/종료 구성 요소로 나눕니다. 그러나 재 계산 및 변경에 의해 변경되지 않은 값에 대해서는 업데이트 섹션에서 많은 계산을 낭비한다는 것을 발견했습니다. 속성을 이미 현재 값과 동일한 값으로 재설정합니다.d3 : 노드가 변경되지 않도록 하시겠습니까?

"업데이트 된"세트를 변경/변경되지 않은 세트로 더 나누는 좋은 방법이 있습니까?

답변

1

업데이트 선택에서 다른 선택을 할 수 있습니다. 즉, 업데이트해야하는 항목 만 표시하는 선택기를 사용하여 .selectAll()으로 다시 전화하십시오. 물론 이것은 선택기를 생성 할 수 있다고 가정합니다. 한 가지 방법은 CSS 클래스를 통해 모든 것을 수행하고 코드 자체에 속성을 설정하지 않을 수 있습니다. 그런 다음 CSS 클래스를 기반으로 선택할 수 있습니다.

그 외에도 실제로 수행 할 수있는 것은 없습니다. D3의 모든 아이디어는 시각화가 데이터에 의해 결정되며 데이터가 변경되지 않으면 시각적 요소도 변경되지 않는다는 것입니다.

0

d3 filter 함수를 사용하여 임의의 값을 기반으로 값을 추가로 필터링 할 수 있습니다. 이전에이 패턴을 사용했습니다 :

# store the extra value in the DOM to use for filtering later on: 
selection.attr('data-someExtraValue', function(d) { return d.someExtraValue; }); 

# during the 'update' phase, filter out values who's someExtraValue hasn't changed: 
filteredSelection = selection.filter(function(d) { return d.someExtraValue != parseInt(d3.select(this).attr('data-someExtraValue')); }); 

# do updates on the filtered selection rather than the initial selection... 
관련 문제