Skip to content

Angular Component 性能优化changeDetection?:ChangeDetectionStrategy#OnPush

背景

使用 angular cli 生成一个组件,默认没有配置changeDetection ,也就是changeDetection 为默认值ChangeDetectionStrategy#Default, 正常情况应该没有什么问题,最近在工作中遇到一个比较复杂的组件,经过很长时间的版本迭代,用各种方法添加了各种业务实际需求但不长见到的功能。组件放到页面后,其他表单组件卡顿。翻看其他组件库的源码,发现组件都配置了changeDetection?:ChangeDetectionStrategy#OnPush,自己的组件配置上,效果那是杠杠的。

changeDetection 到底有什么作用

文档上的解释: 链接

可以配置的值有2个

光看这些,肯定一脸懵逼,默认的配置ChangeDetectionStrategy#Default ,有什么好处,为什么会成为默认配置项

一个组件changeComponent,有一个输入框,有一个子组件 fooComponent, fooComponent组件中details 是一个get 属性,每次changeComponent 中输入框输入,detail get 都会执行

如果fooComponent 设置了

结果是这样的:

但是组件的father属性改变后,get detail 也会执行:

结论

changeDetection 能改变组件视图的变检规则,在OnPush模式下,之后组件的输入属性发生变化,视图更新。组件追求极致性能,最好使用OnPush 模式。

附完整代码

app-change

app-foo