У меня есть приложение, которое загружает некоторые изображения с метаданными. Одна папка может быть довольно большой (~ 100-142 Мб) после загрузки в память. Ранее мы использовали простой старый объект javascript для управления состоянием приложения, и все работало нормально, но я хотел бы воспользоваться преимуществами управления состоянием ngrx.
Я обнаружил ngrx, и мне показалось, чтобыть умнее, когда дело доходит до управления государством. Тем не менее, когда я добавляю эти элементы в состояние, приложение зависает при добавлении изображений в хранилище, а затем снижается производительность при доступе к отдельным (и не связанным) флагам из хранилища, т. Е. UI flag - draw открыт.
1) Здесь "directoryies" - это объект Map (), в котором сохранено хранилище (~ 100-120Mb). Каталог - это сложный объект со многими вложенными значениями. Как только изображения загружены, а затем добавлены в хранилище, он a) зависает, а затем b) все остальное (т. Е. Изменение флага пользовательского интерфейса) замедляется.
return {
...state,
loadedDirectories: directories,
filesLoading: false,
};
2) Затем к каталогам затем обращаются изthe store.
this.store
.pipe(select(fromReducer.getLoadedDirectories))
.subscribe(loadedDirectories => {
this._directoryData = loadedDirectories;
});
Селектор выглядит следующим образом ....
export interface ImageLoaderState {
loadedDirectories: Map<string, Directory>;
filesLoading: boolean;
errorMessage: string;
}
export class AppState {
imageLoader: fromImageLoader.ImageLoaderState;
}
export const combinedReducers = {
imageLoader: fromImageLoader.imageLoaderReducer
.... More reducers here ....
}
// Select Image loader state.
export const selectImageLoaderState = (state: AppState) => state.imageLoader;
export const getLoadedDirectories = createSelector(
selectImageLoaderState,
(state: fromImageLoader.ImageLoaderState) => state.loadedDirectories
);
Используя angular 8 и следующие версии ngrx.
"@ngrx/effects": "^8.4.0",
"@ngrx/store": "^8.4.0",
"@ngrx/store-devtools": "^8.4.0",
Есть ликакие-нибудь лучшие практики? т.е. добавить каждое изображение по одному в магазин?