Encontrei uma ocorrência estranha ao trabalhar com Ngrx Store e Angular. Basicamente, o objetivo da minha tarefa é mostrado neste exemplo com cerca de 10 mil entradas em Person[]:
Meu objetivo é mostrar certas pessoas com sobrenomes específicos. Esta é a primeira revisão que fiz, que é bem lenta:
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));
}
);
Eu criei isso por acidente e é muito mais rápido que o código acima:
export const selectPerson = createSelector(
selectCitizensState,
(citizensState: CitizensState): Person[] => [...(citizensState.people ?? [])]
);
Por que isso acontece? Estou apenas criando uma cópia superficial da propriedade store. Imagino que tenha algo a ver com a detecção de alterações do Ngrx ou algo assim, mas não tenho certeza.