2012-01-23 4 views
3

knockout.js 2.0을 사용할 때 중첩 된 foreach 루프를 수행 할 때 성능이 매우 느립니다. 메인 루프는 약 70 개의 레코드가 반환되며 70 개의 json 레코드 안에있는 배열에는 0 - 20 개의 항목이 들어 있습니다. 그래서 저는 이것이 json 데이터가별로 없다고 생각합니다.중첩 된 foreach 루프가있는 knockout.js

난 그냥 아래의 코드를 테스트입니다 :

<table> 
     <tbody data-bind="foreach: Employees, visible: Employees().length > 0"> 
      <tr>     
       <td class="centerdata" data-bind="text: ID"></td> 
       <td class="centerdata" data-bind="text: Name"></td> 
       <td> 
        <table> 
         <tbody data-bind="foreach: $data.Transactions"> 
          <tr> 
           <td data-bind="text:TransDate"></td> 
          </tr> 
         </tbody> 
        </table> 
       </td> 
      </tr>      
     </tbody> 
    </table> 

페이지를로드하는 데 약 20 초가 걸립니다. json에는 다른 필드가 있지만 단순하게하기 위해 필드를 제거했습니다.

덕분에, 매트

+0

이 스레드를보십시오 : https://github.com/SteveSanderson/knockout/pull/272 및 github에서 최신 KO 버전으로 앱을 테스트 해보십시오. https://github.com/SteveSanderson/knockout/tree/master/build/output. KO 2.1에 포함될 몇 가지 훌륭한 개선 사항을 확인해야합니다. –

+0

우리는 최신 knockout을 사용해 보았고 두 템플리트 모두 foreach 루프를 이름을 지정했지만 성능은 여전히 ​​동일합니다. – Matthew

답변

1

내가 거기에 뭔가 다른, 여기 마태 복음를 진행해야한다 생각합니다.

내가 언급 한 것과 비슷한 크기의 더미 데이터로 마크 업을 사용하면 Chrome에서 1 초가 걸립니다.

http://jsfiddle.net/unklefolk/DCLaR/

는 관찰 따라 반복적으로 계산되고 그 있는가? 그렇다면 스로틀 기능을 살펴보십시오 (http://knockoutjs.com/documentation/throttle-extender.html)