在最近开发AngularJS应用程序时,我遇到了与手表有关的性能问题,进一步深入挖掘让我想知道使用双向数据绑定的脏检查算法的时间复杂度是多少?从它的外观来看,每一个事件之后都有一个消化循环,这个循环称为一个观察循环,所以这必须是O(n^2)...这是正确的吗?AngularJS的脏检查算法的时间复杂度是多少?
1
A
回答
1
脏检查发生在$diggest
周期中,所以我们需要研究$diggest
周期的复杂性。
$diggest
周期是Angular确保模型更改已经解决的阶段,以便它可以使用更新的更改呈现视图。为此,Angular开始一个循环,其中每次迭代评估视图的所有模板表达式 以及$scope
的$watcher
函数。 如果在当前的迭代中结果与前一个相同,则 然后Angular将退出循环。否则,它会再试一次。 如果经过10次尝试仍未解决,Angular将退出 ,并显示错误:"Infite $diggest Loop Error" (infdig
)。
因此,脏检查的复杂性会降低您在$watcher
和您的视图表达式(如$filter
s)中所具有的功能的复杂性。
因此,$diggest
单独的复杂度为O(n)
,其中n
是需要迭代的数字和模板表达式。但是,那么你将不得不考虑这些功能的复杂性。此外,请注意,周期将始终访问所有这些功能至少两次(为了确保更改已经解决),所以如果您想要更加精确,可以说它的复杂度至少为O(n*2)
,并且最大复杂度为O(n*10)
,但由于2是最大数量为10的常数值,所以复杂度仍应被视为O(n)
。
相关问题
- 1. 分时排序算法的时间复杂度是多少?
- 2. 爬山算法的时间复杂度是多少?
- 3. 整个算法的时间复杂度是多少?
- 4. 这个算法的时间复杂度是多少?
- 5. 这个算法的时间复杂度是多少?
- 6. 这个算法的时间复杂度是多少?
- 7. 这个算法(代码)的时间复杂度是多少?
- 8. 通配符匹配算法的时间复杂度是多少?
- 9. Collection.toArray()的时间复杂度是多少?
- 10. 查找所有组合的算法的时间复杂度是多少?
- 11. 算法复查时间复杂度
- 12. 算法算法的时间复杂度
- 13. 这个排列算法的空间复杂度是多少?
- 14. 算法复杂度时间
- 15. NavigableMap的floorEntry()方法的时间复杂度是多少?
- 16. 检查字典是否有密钥的时间复杂度是多少?
- 17. 减少算法时间的复杂性
- 18. list.index(obj)方法的时间复杂度是多少?
- 19. Ruby中Array#uniq方法的时间复杂度是多少?
- 20. heapifyUp()方法的时间复杂度是多少?
- 21. addFirst(e)和removeFirst()方法的时间复杂度是多少?
- 22. EM算法的计算复杂度是多少?
- 23. 递归算法的时间复杂度
- 24. 算法的时间复杂度
- 25. 算法的时间复杂度分析
- 26. 以下算法的时间复杂度?
- 27. 以下算法的时间复杂度
- 28. 二次算法的时间复杂度
- 29. 分析时间复杂度的算法
- 30. 排序算法的时间复杂度