【发布时间】:2023-03-16 11:36:01
【问题描述】:
AngularJS 承诺似乎与摘要循环相关联,例如,在运行摘要循环之前不会调用成功/错误回调。这意味着任何使用 Promise 的东西,例如 $http 或手动创建的 Promise,也需要触发一个摘要循环才能让回调运行。
是否可以在 Angular 中使用 Promise,而根本不运行摘要循环?我知道您可以使用$applyAsync,它将摘要周期安排在稍后的时间,但我希望根本不运行摘要周期,并且仍然运行then 回调。
基本上,我正在尝试研究如何从一个应用程序中尽可能多地压缩性能,该应用程序将使用相当多的异步行为,需要解决 Promise 但不一定要运行摘要循环。
【问题讨论】:
-
您是否真的将摘要周期确定为具有性能成本?推迟继续调用是 Promise 的基本属性,在其他实现中似乎并不昂贵(我不知道 AngularJS 的 Promise)。
-
@dystroy 我还没有确定它具有非常高的性能成本,因为该应用程序还不存在。然而,即使它需要 10 毫秒(在以前的应用程序中,它们可能需要更长的时间),并且我有 10 个承诺在 1 秒内解决(每个承诺由单独的事件触发),最终每秒需要 100 毫秒的时间进行不必要的摘要循环运行,这似乎可以进入用户能够注意到的领域,特别是因为它减少了可用于进行其他处理的时间。
-
那么就使用原生承诺吧。
-
@dfsq 这已经超出了我的想法,我可能最终会这样做。不过,在理想情况下,我会使用一个 Promise 实现,只是为了减少代码中使用的不同 API。
-
承诺不会等待 10 毫秒才能继续。您可以使用目前似乎比本地更快的 Bluebird。
标签: javascript angularjs performance angular-promise angularjs-digest