Javascript 铬合金的性能问题

Javascript 铬合金的性能问题,javascript,angularjs,google-chrome,Javascript,Angularjs,Google Chrome,我目前在一个相对较大的项目中工作,该项目由AngularJs构建。应用程序的一部分是一个表单,您可以向其添加任意数量的页面(不幸的是,添加了许多不必要的垃圾),即表示表单模型的对象可能会变得非常大。在某一点上,Chrome基本上无法处理它,需要10-20秒来获得场聚焦或按下按钮。另一方面,Firefox可以非常顺利地管理至少5倍的数据 我的问题是,这可能是什么原因?一般是大型物体吗?这可能是因为Angular的实现不好吗?Chrome开发工具中有一些非常强大的功能,用于分析应用程序的性能,包括时

我目前在一个相对较大的项目中工作,该项目由AngularJs构建。应用程序的一部分是一个表单,您可以向其添加任意数量的页面(不幸的是,添加了许多不必要的垃圾),即表示表单模型的对象可能会变得非常大。在某一点上,Chrome基本上无法处理它,需要10-20秒来获得场聚焦或按下按钮。另一方面,Firefox可以非常顺利地管理至少5倍的数据


我的问题是,这可能是什么原因?一般是大型物体吗?这可能是因为Angular的实现不好吗?

Chrome开发工具中有一些非常强大的功能,用于分析应用程序的性能,包括时间轴和配置文件面板

时间线()

Profile()


对于内存量而言,对象可能太大,但也有可能您可以优化组件的渲染以减少延迟。布局通常是性能问题的一个原因。您可以阅读更多信息。

将该对象拆分为几个较小的对象可能会有所帮助。 也可能是
object.foo
object['foo']
之间的性能差异。 也要尽量避免在你的结构中进行深层嵌套。
从理论上讲,结构的某些部分可以通过函数按需动态返回,例如。

好的,如果没有看到一些代码,很难确切地告诉您它为什么超慢,或者可以做些什么来加速它。但考虑到您所说的对象是巨大的,我想angular在摘要周期中正在与所有绑定进行斗争

所以,这里有一些性能调整,你可以尝试加快一点应用程序

  • 尽可能避免使用观察者

    观察阵列时,可能使用
    $watchCollection
    (浅表观察)而不是
    $watch
    (深表观察阵列)

  • 使用
    ng repeat
    时,尽量不要一次加载所有项目。尽可能地编页码。也许是某种无限卷轴

  • 尽可能避免使用过滤器,尤其是在有大量项目的
    ng repeat
    s中

  • 避免将
    ng if
    ng show
    等绑定到执行繁重处理的函数,因为这些函数会在每个摘要周期中进行计算

  • 如果可以,请使用
    ng if
    而不是
    ng show
    。这将从dom中删除元素并销毁所有观察者

  • 尽可能使用一次性绑定。这几乎只会更新一次UI,然后忘记它绑定到的模型(从而避免观察者)

    这可以通过向绑定中添加
    来实现

    示例:
    {{::myModel}

    一篇关于一次性装订的好文章:

  • $interval
    如果不小心使用,可能是有害的。每当$interval滴答滴答地响,它就会触发一个摘要周期。在某些情况下,这可能不需要,可以通过将
    false
    作为第四个参数传递来关闭

    $interval(fn,延迟,[count],[invokeApply],[Pass])

    更多信息请点击此处:

  • 最后但并非最不重要的一点是,配置您的应用程序

    就像@Gideon所说的,使用google chrome评测工具来识别应用程序中花费太多时间执行和优化的部分

    内置分析器是好的,但是考虑使用一些专门用于分析角度应用程序的工具。


  • 注意:可能也值得研究。一种角度指令,可用于关闭ng repeat中不在视图中的元素的观察者。(我自己没有试过,但看起来还可以)

    这个物体能有多大?你能说得更具体一点吗?不知道如何衡量它,但当问题发生时,它大约有1000000个字符。哇,这太大了。你使用的是哪个版本的Chrome,最好保持最新。但是您无法控制用户的版本,因此需要防止或修复此问题。我使用的是版本50.0.2661.102(64位),但是,是的,无论用户使用的是哪个版本,问题都应该得到修复。不同的计算机在不同的阶段似乎都有问题。