angular - 由于过度使用内存和 CPU,NgRx 和 redux 开发工具出现性能问题

标签 angular redux ngrx redux-devtools redux-devtools-extension

最近加入了一个使用 Angular 和 Redux 的新项目。但它没有启用 chrome redux 开发工具。我注意到它在 app.module.ts 部分被注释掉了。所以我取消评论这部分。

StoreDevToolsModule.instrument({
    name: 'AppName Dev Tools",
    logOnly: environment.production, 
    maxAge: 10 
})

然后我看到了关于“过度使用内存和 CPU”的警告以及指向 github 文档的链接:https://github.com/zalmoxisus/redux-devtools-extension/blob/master/docs/Troubleshooting.md#excessive-use-of-memory-and-cpu

启用 reduxDev 工具会使应用程序崩溃,无法单击任何按钮或选项卡。即使我将 maxAge 调整为 2,它仍然很慢。如果未启用 ReduxDev 工具,则不会出现性能问题。

因为文档说“这是由于一些巨大的对象的序列化”。然后我开始浏览应用程序,看看可能是什么。我的应用程序没有有图片或视频。唯一可能被视为大型的 API 是返回 4.5 MB 下拉内容的端点。而且我认为它是由以前的开发人员存储的,因为此下拉内容在整个应用程序的多个选项卡中使用。

现在尝试根据文档部分清理上述端点:

const actionSanitizer = (action) => (
  action.type === 'FILE_DOWNLOAD_SUCCESS' && action.data ?
  { ...action, data: '<<LONG_BLOB>>' } : action
);
const store = createStore(rootReducer, window.__REDUX_DEVTOOLS_EXTENSION__ && window.__REDUX_DEVTOOLS_EXTENSION__({
  actionSanitizer,
  stateSanitizer: (state) => state.data ? { ...state, data: '<<LONG_BLOB>>' } : state
}));

我发现我们的应用程序是基于这个 sample project by ngrx根本没有 createStore()

问题:1.鉴于我们的项目看起来像this,我应该在哪里添加 sanitizer ? ?

  1. 我真的不明白大型下拉数据(树结构中的所有文本)为何难以序列化。 4.5mb 也算大吗?我从任务管理器中看到,当启用 Redux Dev 工具时,它使用了 1-2 GB 的内存。所以也许这是我不知道的其他问题?谢谢。

编辑1:

尝试了第一个答案并将状态和 Action 缩减器添加到 StoreDevToolsModule.instrument({}) 部分。但性能仍然很差。 MaxAge 设置为 4。我现在可以看到整棵树。但它仍然导致 chrome 崩溃。

最佳答案

这些可以通过 StoreDevtoolsModule.instrument 配置进行配置。

参见 docs了解更多信息

关于angular - 由于过度使用内存和 CPU,NgRx 和 redux 开发工具出现性能问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61594594/

相关文章:

jasmine - ngrx单元测试jasmine reducer 如何比较状态

javascript - 如何在 Angular2 中实现 'category filter'

javascript - Angular2 测试。 Promise 从未在 TestBed.compileComponents 中解决

Angular Material : recalculate position of mat-menu on height change

reactjs - [类型错误 : undefined is not an object (evaluating 'iter[Symbol.iterator]' )] react-native

javascript - "this"在 map 运算符 Angular 中未定义

typescript - angular2 所见即所得的 tinymce 实现和 2 向绑定(bind)

javascript - 测试 Redux 组合 reducer

reactjs - Redux createStore<StoreState> 产生错误 : Expected 4 type arguments, 但得到 1

javascript - 为什么计数器值只在第一次递增和递减?