在 Angular 应用程序中,我遇到了一个大量使用
requestAnimationFrame
的第三方库的问题,这反过来会触发大量变更检测周期。
虽然这不一定会导致更大的性能问题,但对我来说似乎仍然没有必要。最重要的是,它会在 Angular 开发工具分析器中引起很多噪音。
一些研究表明我可以告诉 zone.js 停用猴子补丁
requestAnimationFrame
:
(window as any).__Zone_disable_requestAnimationFrame = true;
嗯,这可行,但它让我想知道将来使用这个应用程序的人是否可能会在依赖 zone.js 完成其工作时对她造成严重打击,而不知道我部分禁用了它。
为了更好地了解此决定的影响,我想更好地了解实际用例,其中调用
requestAnimationFrame
可能会改变应用程序状态,从而需要运行更改检测。
为了避免
requestAnimationFrame
事件,您可以使用 ngZone.runOutsideAngular()
来避免调用时进行更改检测。
您必须将所有用于与外部库交互的函数包装在其中。 例如:
library.initialize()
、library.next()
、library.restart()
等
只需将这些调用移到里面即可,
ngZone.runOutsideAngular(()=>{
library.initialize();
});
在全球范围内阻止
requestAnimationFrame
可能不是一个好主意,它可能会导致其他一些库出现意外问题。