После обновления с Angular 8.2.14 до 9.1.12 мы столкнулись с проблемами с отложенной загрузкой изображений, реализованной в нашем приложении.
Перед обновлением до Angular 9 при загрузке страницы первоначально видимые заполнители были заменены, как и предполагалось. После обновления Element.getBoundingClientRect
первоначально возвращает позиции, которые в основном находятся вне области просмотра, и загружаются только первые несколько изображений. Видимость проверяется в директиве ngAfterContentInit
.
Если вместо этого проверяется видимость в ngDoCheck
, это в конечном итоге работает, позиции, возвращаемые Element.getBoundingClientRect
в конечном итоге совпадают положения изображений в области просмотра. Но метод вызывается так часто, что производительность заметно ухудшается. Других обходных путей я не нашел.
Но во время прокрутки ленивая загрузка работает по назначению. Проблема возникает только при загрузке страницы.
Но если Ivy отключен в tsconfig.app. json ленивая загрузка работает так же, как и до обновления до Angular 9.
"angularCompilerOptions": {
"enableIvy": false
}
Так что проблема, похоже, связана с Айви. Есть ли какие-то изменения в Айви, объясняющие эту проблему? Обнаружение изменений, похоже, отличается для Ivy, поскольку без Ivy положение элементов изображения уже было завершено в ngAfterContentInit
(положение соответствует его видимому положению), тогда как с Ivy Элементы имеют другое положение, которое отличается от его конечных положений.
Мы приветствуем любые предложения по исправлению или обходному решению этой проблемы.