angular - 我可以为所有项目做关于推送变更检测的架构吗?
问题描述
我将在 Angular 8 上开始新的大项目。我为所有组件设置下一行
@Component({
...
changeDetection: ChangeDetectionStrategy.OnPush,
...
})
我可以做这样的项目吗?或者在某些情况下我是否必须放弃 OnPush 策略来实施项目
解决方案
是的,您可以使用它,但更重要的是,我建议在实际需要的地方使用它,否则您将陷入不易出错的代码和性能问题。
所以,changeDetectionStrategy由 Angular 核心库提供。我正在分享一个我在项目中使用过的简单用例,基于此,您可以在需要的地方关联和使用它。
考虑页面上的两个组件。
- 表格组件(显示数据10K行10列)
- 表单组件(接受用户输入并进行验证等并提交按钮以在表格中添加数据)
假设您已经有 10K 行和 10 列 (10K*10) 单元格 (td)
并且用户正在使用验证器填写表单角度验证表单并运行更改检测周期。
因此,更改检测周期在 dom 树中从上到下运行,它将针对表格中的所有 (10K*10) 单元格运行并使其变慢,您会注意到 IE 浏览器的性能问题,或者如果使用 chrome 有更多数据。
所以当用户与表单交互时,我们不需要对表格组件进行变更检测,这里可以在表格组件中使用onPush策略。这将显着提高性能。
这是摘要
[(10K*10) + 表单控件]在编辑表单时对每个更改检测周期进行对象检查
onPush策略后
[表单控件] 对象检查每个更改检测周期。
注意:在onPush策略中,当通过引用使用组件的更改输入数据时,它将触发更改检测策略
onFormSubmit(){
this.rows.push(this.formObject); // this will trigger change detection in table
}
<form-component></form-component>
<table-component [data]="rows"></table-component>
推荐阅读
- java - activemq 可信包问题
- php - 使用 CodeIgniter 的 API 调用
- azure - 术语“Get-AzureRmDataFactoryV2”未被识别为 cmdlet 的名称
- java - Kafka Producer 超时异常处理指南?
- flutter - 实现 TextOverflow.ellipsis 和 FittedBox
- java - Scala嵌套表达式不带参数
- angular - Angular Firebase 背景消息
- javascript - 关键依赖:依赖的请求是 jQuery Form Validator 插件上的表达式
- swift - 设置自定义字体而不使用属性文本
- python - Python:使用列表推导将链表转换为列表?