从Angular 8.2.14升级到9.1.12后,我们在应用程序中实现的图像的延迟加载遇到了问题。
在加载页面时更新到Angular 9之前,按预期替换了最初可见的占位符。更新后,Element.getBoundingClientRect
最初返回的位置大多位于视口之外,并且仅加载了前几个图像。在指令的 ngAfterContentInit
中检查可见性。
如果相反地在 ngDoCheck
中检查了可见性,则Element.getBoundingClientRect
返回的位置最终将与图像在视口中的位置匹配。但是这种方法经常被调用,以至于性能明显下降。我还没有找到其他解决方法。
但是在滚动过程中,延迟加载会按预期工作。该问题仅在页面加载时发生。
但是,如果在tsconfig.app.json中禁用了Ivy,则延迟加载的工作方式与更新到Angular 9之前相同。
"angularCompilerOptions": {
"enableIvy": false
}
所以问题似乎与常春藤有关。常春藤有变化可以解释这个问题吗?对于常春藤,更改检测似乎有所不同,因为没有常春藤,图像元素的位置已在 ngAfterContentInit
中完成(位置与可见位置匹配),而< strong> with Ivy 元素的位置与其最终位置不同。
任何解决或解决此问题的建议,将不胜感激。