调用 requestAnimationFrame 时进行更改检测的用例

问题描述 投票:0回答:1

在 Angular 应用程序中,我遇到了一个大量使用

requestAnimationFrame
的第三方库的问题,这反过来会触发大量变更检测周期。

虽然这不一定会导致更大的性能问题,但对我来说似乎仍然没有必要。最重要的是,它会在 Angular 开发工具分析器中引起很多噪音。

一些研究表明我可以告诉 zone.js 停用猴子补丁

requestAnimationFrame
:

(window as any).__Zone_disable_requestAnimationFrame = true;

嗯,这可行,但它让我想知道将来使用这个应用程序的人是否可能会在依赖 zone.js 完成其工作时对她造成严重打击,而不知道我部分禁用了它。

为了更好地了解此决定的影响,我想更好地了解实际用例,其中调用

requestAnimationFrame
可能会改变应用程序状态,从而需要运行更改检测。

angular performance requestanimationframe angular-changedetection
1个回答
0
投票

为了避免

requestAnimationFrame
事件,您可以使用
ngZone.runOutsideAngular()
来避免调用时进行更改检测。

您必须将所有用于与外部库交互的函数包装在其中。 例如:

library.initialize()
library.next()
library.restart()

只需将这些调用移到里面即可,

ngZone.runOutsideAngular(()=>{
  library.initialize();
});

在全球范围内阻止

requestAnimationFrame
可能不是一个好主意,它可能会导致其他一些库出现意外问题。

© www.soinside.com 2019 - 2024. All rights reserved.