我正在使用Angular2-RC.1,当我设置具有大数据的组件时,我发现性能很差.
我有一个表格组件(包装Handsontable),我公开了一个名为“data”的可绑定Input属性.
此属性通常绑定到一个大型数组(大约十万行).
我有一个表格组件(包装Handsontable),我公开了一个名为“data”的可绑定Input属性.
此属性通常绑定到一个大型数组(大约十万行).
当我设置我的大型数据集时,更改检测会导致对主机组件(而不是输入属性的所有者)中的整个数组进行值等效测试.
@Component({ selector: "ha-spreadsheet",template: "<hot-table [data]="data"></hot-table>",directives: [ HotTable ],encapsulation: ViewEncapsulation.Emulated }) export class Spreadsheet implements OnActivate { data: { rows: Array<Array<number>> }; load(service) { this.data = service.getLargeDataSet(); } }
在这里,我展示了一个callstack,显示在整个数据上启动了变化检测. (粗体方法是我的主机组件的运行时自动生成的更改检测功能),而不是简单地比较引用.
这是故意的行为吗?
解决方法
我自己找到了答案.
独立更改检测过程是比较引用(这是它的设计行为).
独立更改检测过程是比较引用(这是它的设计行为).
但是,如果未启用生产模式,则其他断言会对组件的数据执行等效性测试.