2012-02-23 3 views
1

이전에 일괄 업데이트를 수행 할 때 ko.observableArray 업데이트를 연기하는 방법에 대해 this question에게 물었습니다. 응답은 래핑 된 배열을 업데이트 한 다음 valueHasMutated 호출 .knockoutjs (스칼라 버전)를 사용하여 데이터를로드 할 때 종속성을 지연

ko.observable()에 업데이트를 연기하는 동일한 방법이 있습니까? 많은 시간을 업데이트 할 때 종속성을 업데이트하고 다시 업데이트하는 데 많은 시간을 소비하는 것으로 나타났습니다. 이러한 업데이트를 일괄 처리하는 데 좋은 패턴이 있습니까?

유전자

답변

7

이 분야에서 생각의 몇 :

  • 관련 업데이트를보다 효율적으로 만드는 플러그인이있다 : https://github.com/mbest/knockout-deferred-updates. 필자 Michael Best는 KO 프로젝트와 관련되어 있으며 성능 향상을 돕고 있습니다. 이 플러그인은 결국 어떤 형태로 KO 코어에 롤백 될 수 있습니다. 이 플러그인을 사용해보고 이러한 유형의 변경에 대한 필요성에 대한 더 많은 증거를 제공하므로 앱에서 앱이 어떻게 실행되는지 확인해야합니다.

  • 다른 방법은 내가 잠시 동안 쓴 것과 비슷할 것입니다. here. 기본적으로 ko.computed 속성은 사용자가 켜기/끄기를 전환 할 수있는 관찰 가능 항목에 대한 추가 종속성을가집니다. 이 옵션이 켜져 있으면 ko.computed는 실제 평가를 수행하여 잠재적으로 많은 종속성을 생성합니다. 이 옵션이 꺼져 있으면 가장 최근 결과를 반환하고 플래그 이외의 종속성을 모두 삭제합니다. 다시 토글하면 다시 평가됩니다. 무거운 업데이트 중에는 업데이트가 완료 될 때까지 일시 중지 할 수 있습니다.

+0

감사합니다! 두 가지 가능성을 모두 확인하고 곧보고 할 것입니다. –

+0

지연된 업데이트 플러그인을 사용하여 불필요한 정렬 및 기타 계산을 제거하여 처리 시간이 약 10 배 감소한 것을 확인할 수 있었지만 문서에서 약간 명확하지 않은 사항이 있습니다. 내가 가지고있는 한가지 문제는 바인딩에 사용 된'ko.computed' 변수에'processImmediate'를 적용하는 법을 알아내는 것입니다. –

+0

언제든지 문제/질문을 플러그인에 게시 할 수 있습니다. 마이클이 의견을 분명히 찾고 있으며 기꺼이 귀하의 시나리오를 정리할 수 있도록 도와 드리겠습니다. –

관련 문제