Javascript 铬合金的性能问题
我目前在一个相对较大的项目中工作,该项目由AngularJs构建。应用程序的一部分是一个表单,您可以向其添加任意数量的页面(不幸的是,添加了许多不必要的垃圾),即表示表单模型的对象可能会变得非常大。在某一点上,Chrome基本上无法处理它,需要10-20秒来获得场聚焦或按下按钮。另一方面,Firefox可以非常顺利地管理至少5倍的数据Javascript 铬合金的性能问题,javascript,angularjs,google-chrome,Javascript,Angularjs,Google Chrome,我目前在一个相对较大的项目中工作,该项目由AngularJs构建。应用程序的一部分是一个表单,您可以向其添加任意数量的页面(不幸的是,添加了许多不必要的垃圾),即表示表单模型的对象可能会变得非常大。在某一点上,Chrome基本上无法处理它,需要10-20秒来获得场聚焦或按下按钮。另一方面,Firefox可以非常顺利地管理至少5倍的数据 我的问题是,这可能是什么原因?一般是大型物体吗?这可能是因为Angular的实现不好吗?Chrome开发工具中有一些非常强大的功能,用于分析应用程序的性能,包括时
我的问题是,这可能是什么原因?一般是大型物体吗?这可能是因为Angular的实现不好吗?Chrome开发工具中有一些非常强大的功能,用于分析应用程序的性能,包括时间轴和配置文件面板 时间线() Profile()
对于内存量而言,对象可能太大,但也有可能您可以优化组件的渲染以减少延迟。布局通常是性能问题的一个原因。您可以阅读更多信息。将该对象拆分为几个较小的对象可能会有所帮助。 也可能是
object.foo
和object['foo']
之间的性能差异。
也要尽量避免在你的结构中进行深层嵌套。
从理论上讲,结构的某些部分可以通过函数按需动态返回,例如。好的,如果没有看到一些代码,很难确切地告诉您它为什么超慢,或者可以做些什么来加速它。但考虑到您所说的对象是巨大的,我想angular在摘要周期中正在与所有绑定进行斗争 所以,这里有一些性能调整,你可以尝试加快一点应用程序
$watchCollection
(浅表观察)而不是$watch
(深表观察阵列)ng repeat
时,尽量不要一次加载所有项目。尽可能地编页码。也许是某种无限卷轴ng repeat
s中ng if
、ng show
等绑定到执行繁重处理的函数,因为这些函数会在每个摘要周期中进行计算ng if
而不是ng show
。这将从dom中删除元素并销毁所有观察者:
来实现
示例:{{::myModel}
一篇关于一次性装订的好文章:$interval
如果不小心使用,可能是有害的。每当$interval滴答滴答地响,它就会触发一个摘要周期。在某些情况下,这可能不需要,可以通过将false
作为第四个参数传递来关闭
$interval(fn,延迟,[count],[invokeApply],[Pass])
更多信息请点击此处:内置分析器是好的,但是考虑使用一些专门用于分析角度应用程序的工具。
注意:可能也值得研究。一种角度指令,可用于关闭ng repeat中不在视图中的元素的观察者。(我自己没有试过,但看起来还可以)这个物体能有多大?你能说得更具体一点吗?不知道如何衡量它,但当问题发生时,它大约有1000000个字符。哇,这太大了。你使用的是哪个版本的Chrome,最好保持最新。但是您无法控制用户的版本,因此需要防止或修复此问题。我使用的是版本50.0.2661.102(64位),但是,是的,无论用户使用的是哪个版本,问题都应该得到修复。不同的计算机在不同的阶段似乎都有问题。