0

600 행 정도의 데이터 그리드 (기본적으로 대화식 테이블)가 있습니다.큰 데이터 그리드에서 KO 성능이 좋지 않습니다.

이 그리드에 KO를 바인딩하는 데 실제로 상당한 시간이 걸리는 것으로 나타났습니다. 데이터 바인딩 중. 구형 브라우저에서는 상황이 더욱 악화되고 프로세서는 거의 1 분 동안 정점에 도달합니다.

성능 블록의 가장 큰 부분은 데이터 바인딩을 수행하는 라인에서 오는 것 같습니다. 참고 : 이것은 초기 데이터 바인딩이므로 대용량 업데이트를 처리하는 많은 응답이 적용되지 않는 것 같습니다.

매핑 플러그인도 json 개체를 즉시 뷰 모델로 변환하는 데 사용되었습니다. 그러나 매핑 자체를 수행하는 라인은 databind하는 라인에 비해 너무 많은 시간을 소비하지 않는 것 같습니다.

불행히도 페이징은 요구 사항으로 인해 문제가되지 않습니다. 더 큰 뷰 모델 및 KO 최적화에 대한 일반적인 팁/포인터가 있습니까?

+0

json 데이터 덤프와 json을 바인딩하는 html/js 부분을 제공 할 수 있다면 매우 유용 할 것입니다. jsfiddle 예를 도와 드리겠습니다. – billaraw

답변

0

매핑 플러그인을 사용할 때 필요한 조언 중 하나는 필요한 속성 만 매핑하는 것입니다. 대용량 데이터 세트에서 모든 속성을 관찰 가능 항목에 매핑하는 것은 실제 성능 저하 요인이 될 수 있습니다.

+0

매핑을 수행하는 행은 괜찮은 것처럼 보이지만 데이터 바인딩은 실제로 느립니다. databind가 databind에도 영향을 미치지 않는 한. 이것은 또한 초기 databind입니다. – Alwyn

+0

그것은 녹아웃이 가장 무거운 작업을 수행해야한다는 것을 viewModel에 바인딩 할 때 적용됩니다. 매핑 된 데이터는 이제 모든 루프에 대해 HTML을 렌더링하고 뷰에서 모든 관측 가능 항목에 대한 변경 내용을 추적해야합니다. 루프를 단순화하여 단순한 정렬되지 않은 목록 만 사용하고 1 개의 속성 만 출력하면 바인딩이 더 빨리 표시됩니다. jsfiddle을 게시하면 도움이 될 것입니다. – lagerone

0

비슷한 문제가있어 Knockout Google 그룹에 게시되었습니다. Michael Best는 trying some custom bindings을 권장합니다.

편집을 수행 중이므로 그의 녹아웃 테이블 바인딩이 작동하지 않습니다. 그러나 knockout-repeat 바인딩을 사용해보십시오. 그것은 Knockout의 기본 foreach보다 빠릅니다 (HTML에서 약간의 추가 복잡성을 희생해야 함). 마지막 옵션은 그리드를 한 번에 빌드하는 고유 한 바인딩을 만드는 것입니다. 이론 상으로는 전체 격자를 메모리에 구축하고 DOM에 채우는 것이 DOM을 개별 비트로 수정하는 것보다 빠릅니다.

KoGrid는 아마도 원하는 것이 아니지만 소스에 포함 된 힌트와 팁이있을 수 있습니다.

관련 문제