2012-01-23 223 views
3

我正在使用knockout.js 2.0,當我做一個嵌套的foreach循環時,性能非常慢。主循環有大約70條記錄被返回,並且這70條json記錄中的數組包含0-20項。所以我覺得這不是很多json數據。knockout.js與嵌套的foreach循環

我只是用下面的代碼測試:

<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

我們嘗試使用最新的淘汰賽,並且同時命名模板化了兩個foreach循環,但性能仍然相同。 – Matthew

回答

1

我想一定是別的東西會在這裏,馬修。

我已經打開了一個快速小提琴,使用您的標記與一些類似的大小的虛擬數據,你提到的和性能是在Chrome中約1秒。

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

是否有相關的可觀察正被重複計算?如果是這樣,看看油門的功能(http://knockoutjs.com/documentation/throttle-extender.html)