我在使用 Ngrx Store 和 Angular 时发现了一个奇怪的现象。基本上,我的任务目标如下例所示,其中 Person[] 中有大约 10k 个条目:
我的目标是显示特定姓氏的特定人物。这是我想到的第一个修订版本,运行速度非常慢:
export const selectPerson = createSelector(
selectCitizensState,
(citizensState: CitizensState): Person[] => citizensState.people ?? []
);
export const selectPeopleWithSurname = createSelector(
selectPerson,
selectSelectedSurnames,
(people: Person[], surnames: string[]) => {
if (surnames.length === 0) {
return people;
}
return people.filter((person) => surnames.includes(person.surname));
}
);
我偶然想到了这个,它比上面的代码快得多:
export const selectPerson = createSelector(
selectCitizensState,
(citizensState: CitizensState): Person[] => [...(citizensState.people ?? [])]
);
为什么会这样?我只是创建了 store 属性的浅拷贝。我猜想这可能和 Ngrx 的变更检测之类的机制有关,但我不太确定。