我有一个包含数百个computerableObservables的剔除应用程序。如果我关闭deferUpdates,则更新速度较慢但可管理(我的计算机上为+ -1秒)。但是,如果我打开deferUpdates,这将变为68秒,在此期间chrome无法响应。
起初,我认为页面陷入了无限循环,因为当我暂停脚本执行时,堆栈跟踪不断重复。此片段重复了数十次:
self._limitChange (knockout-3.5.0.debug.js:1452)
_evalDelayed (knockout-3.5.0.debug.js:2376)
markDirty (knockout-3.5.0.debug.js:2177)
notifySubscribers (knockout-3.5.0.debug.js:1398)
limitNotifySubscribers (knockout-3.5.0.debug.js:1353)
(anonymous) (knockout-3.5.0.debug.js:1254)
self._limitChange (knockout-3.5.0.debug.js:1452)`
最终,我发现_limitChange的每个堆栈帧中都有一个不同的可计算观察值。似乎淘汰赛以递归方式遍历了整个computedObservable-tree。
我的问题如下:
任何见解都会受到赞赏。