【问题标题】:Should i disable change detection during angular app init phase?我应该在角度应用程序初始化阶段禁用更改检测吗?
【发布时间】:2018-08-15 07:03:17
【问题描述】:

对于上下文:

我有 Angular 5 应用,其启动周期涉及:

  • 对服务器 API 的 Http 调用(检查令牌、检索用户数据)
  • 本地存储 (db) 调用
  • 相当多的初始化过程来准备和转换数据

我决定使用调试器逐步完成整个启动周期,并意识到 Angular 在启动周期中会触发对许多进程的更改检测。

现在我想知道(问题):考虑到应用程序初始化之前的所有活动只是为了准备应用程序使用的数据 - 我是否应该在应用程序初始化周期中分离更改检测并在初始化结束后重新附加更改检测然后触发是吗?

基本上是想了解这是否会节省加载时间和处理,还是一个坏主意?

更新:由于我浏览了很多关于这个主题的文章,我意识到可能会改变我提出这个问题的方式的其他事实。

  1. 更改检测与“视图”相关 - 如果其中没有模板和绑定 - 甚至可能不值得尝试对此进行优化

  2. 对于或多或少严重的应用程序,切换到 onPush CD 策略是一种常见的做法,这也有助于消除此处进行额外改进的需要。

  3. 最后一件事 - 今天晚些时候我仍然会尝试以下实验:

    • 使用分离的 CDR 加载 Ionic/Angular 应用程序,然后在初始化阶段结束后重新连接
    • 正常加载同一个应用
    • 然后看看什么是增量(如果有的话)

【问题讨论】:

    标签: angular ionic3 angular2-changedetection


    【解决方案1】:

    如果您想为应用程序初始化数据或检查身份验证/授权。

    为此,您可以在“/”基本 URL 上使用路由保护,例如 canActivate 或 Resolve。使用“rxjs/operator/take”在路由启动组件之前等待第一个响应。

    将你所有的加载逻辑移到守卫。

    【讨论】:

    • 嘿 Ojesh,我不是在研究如何以及在哪里初始化,所有这些都运行良好。我的问题更多的是 - 在所有数据都为应用程序准备好之前,我是否应该阻止更改检测?
    • 嗨,谢尔盖,你所实施的肯定会奏效。我的观点是将初始化逻辑与组件分开,否则您将遇到冲突的场景,并且要解决该问题,您可能会遇到其他一些问题,例如禁用和启用更改检测或性能问题。由于用户数据也可以被任何其他组件使用,因此必须在某个公共位置进行定义,并且组件必须处理其特定的业务场景,并且用户数据必须开箱即用。让我知道这是否有意义。
    猜你喜欢
    • 1970-01-01
    • 2013-11-30
    • 2015-01-04
    • 2015-09-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-30
    • 2018-07-07
    相关资源
    最近更新 更多