Angular2模拟封装会影响性能吗?

时间:2016-05-27 09:36:16

标签: angular

我问的是这个问题,因为我们现在正在构建的应用程序速度非常慢,尽管我们没有做过疯狂的事情!

只需一个简单的多步骤表格就可以说20个字段。 该应用程序非常慢,特别是滚动我可以直观地看到滞后。 所有组件都是定制和定制的,因此我们不使用任何第三方库。

我试图将所有组件都封装起来:ViewEncapsulation.None,我不能100%说这解决了这个问题,但它确实让它有点顺利。

有没有人对此有很好的经验?

2 个答案:

答案 0 :(得分:1)

首先,如果您调查效果,请确保已启用prodMode。在devMode中,更改检测始终会进行第二次转弯。

解析和重写样式时,

ViewEncapsulation.Emulated(默认)会对性能产生一次性影响。对于此构建步骤将很快提供,因此在Angular应用程序甚至提供给客户端之前,这是静态完成的。

ViewEncapsulation.Native可以提高性能,因为它可以让浏览器更好地优化重新呈现,因为它可以将重新呈现限制为单个组件而不是整个页面。无法保证浏览器实际上进行了这种优化。但这是影子穿孔选择器/deep/>>>)和::shadow从阴影DOM规范中删除的主要原因。

另见Is shadow DOM fast like Virtual DOM in React.js?

答案 1 :(得分:0)

实际上,它会影响性能。这就是恕我直言,@angular/material之类的UI库使用ViewEncapsulation.None的原因。模拟的影子DOM意味着对于每个组件,都将新的样式表添加到DOM中,因此样式渲染较慢。

奇怪的是,您的屏幕上有20个组件,但是我可以肯定地想象,数十个或数百个组件会导致性能下降。当该组件具有复杂且未优化的CSS规则时,甚至更多