2012-01-23 182 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)