Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 30.12.2021, 19:45
Кандидат Javascript-наук
Отправить личное сообщение для Raadsert Посмотреть профиль Найти все сообщения от Raadsert
 
Регистрация: 09.12.2021
Сообщений: 100

Загрузка изображений и анимирование
Здравствуйте.

У меня возникла проблема, при загрузке различных изображений сильно зависает анимация (именно в момент загрузки изображения) основанная на "requestAnimationFrame".

Пробовал ставить lazyload но ничего не получилось.

К примеру есть такой сайт https://themarcus.com , на нём задействована аналогичная анимация на "requestAnimationFrame" при том, загружаются изображения через lazyload но никаких зависаний в анимации нет.

Подскажите как добиться такого эффекта?
Ответить с цитированием
  #2 (permalink)  
Старый 30.12.2021, 22:32
Аватар для voraa
Профессор
Отправить личное сообщение для voraa Посмотреть профиль Найти все сообщения от voraa
 
Регистрация: 03.02.2020
Сообщений: 2,750

Сообщение от Raadsert
К примеру есть такой сайт https://themarcus.com , на нём задействована аналогичная анимация на "requestAnimationFrame"
С чего Вы это взяли? Там анимация где то через transform, а где то просто video.
Ответить с цитированием
  #3 (permalink)  
Старый 30.12.2021, 23:06
Аватар для voraa
Профессор
Отправить личное сообщение для voraa Посмотреть профиль Найти все сообщения от voraa
 
Регистрация: 03.02.2020
Сообщений: 2,750

Ну и еще зависит от того, что именно вы делаете в requestAnimationFrame.
Туда тоже можно напихать тяжелых операций, занимающих кучу времени, чего делать не стоит.
Ответить с цитированием
  #4 (permalink)  
Старый 31.12.2021, 00:11
Кандидат Javascript-наук
Отправить личное сообщение для Raadsert Посмотреть профиль Найти все сообщения от Raadsert
 
Регистрация: 09.12.2021
Сообщений: 100

Сообщение от voraa Посмотреть сообщение
Ну и еще зависит от того, что именно вы делаете в requestAnimationFrame.
Туда тоже можно напихать тяжелых операций, занимающих кучу времени, чего делать не стоит.
У него через "requestAnimationFrame" присваивается значение transform, обычная стандартная анимация с движением влево и через время переносом картинок в конец и зацикливании этого эффекта, там на самом деле множество особенностей.

У меня же просто анимация перемещения влево, так же через transform, но во время загрузки картинок присутствуют микро-лаги (картинка грузится -> лаг -> картинка загрузилась -> анимация отлагала) как будто скрипт ждёт пока загрузится картинка и только после этого продолжает свою работу. Да, картинки маленькие аналогичные по размеру картинкам из примера.

Что делаю с "requestAnimationFrame"? Всё просто как обычная анимация:
function exemple(*) {
 requestAnimationFrame(function anim(e) {
  /* code */
  requestAnimationFrame(anim)
 })
}


Так вот, господа, у кого-то есть предположения или знание того почему происходят подобные микро-лаги или как устроена загрузка изображений (без микро-лагов в исполнении скрипта) на том сайте что был примером?
Ответить с цитированием
  #5 (permalink)  
Старый 31.12.2021, 08:05
Аватар для voraa
Профессор
Отправить личное сообщение для voraa Посмотреть профиль Найти все сообщения от voraa
 
Регистрация: 03.02.2020
Сообщений: 2,750

Сообщение от Raadsert
requestAnimationFrame(function anim(e) {
  /* code */
  requestAnimationFrame(anim)
Если говорить про "тяжелые" операции, то они как раз в /*code*/
Если вы делаете только
elem1.style.transform = ...
elem2.style.transform = ....
....

То по идее никаких задержек быть не должно
Но если там еще всякие getComputedStyle, getBoundingClientRect, да даже всякие обращения к offsetWidth, offsetLeft и прочие запросы размеров элементов, изменения в DOM. то это может вызвать торможения. Это тяжелые операции.

Загрузка через нативный <img loading="lazy" >?

Ну и попытаться понять, что вызывает задержку можно с помощью средств разработчика браузера.

Последний раз редактировалось voraa, 31.12.2021 в 08:14.
Ответить с цитированием
  #6 (permalink)  
Старый 01.01.2022, 14:22
Кандидат Javascript-наук
Отправить личное сообщение для Raadsert Посмотреть профиль Найти все сообщения от Raadsert
 
Регистрация: 09.12.2021
Сообщений: 100

Сообщение от voraa Посмотреть сообщение
Ну и еще зависит от того, что именно вы делаете в requestAnimationFrame.
Туда тоже можно напихать тяжелых операций, занимающих кучу времени, чего делать не стоит.
Сообщение от voraa Посмотреть сообщение
Если говорить про "тяжелые" операции, то они как раз в /*code*/
Если вы делаете только
elem1.style.transform = ...
elem2.style.transform = ....
....

То по идее никаких задержек быть не должно
Но если там еще всякие getComputedStyle, getBoundingClientRect, да даже всякие обращения к offsetWidth, offsetLeft и прочие запросы размеров элементов, изменения в DOM. то это может вызвать торможения. Это тяжелые операции.

Загрузка через нативный <img loading="lazy" >?

Ну и попытаться понять, что вызывает задержку можно с помощью средств разработчика браузера.
loading="lazy" присутствует. Никаких тяжёлых операций в цикле анимации нет.

Просмотрел работу сайта через performance, там показало что чрезмерное время выполнения тасков вызывает "Composite Layers", а на js нет никаких нареканий.

Не знаете с чем может быть связана проблема длительного выполнения "Composite Layers" ?
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Ленивая загрузка изображений через Promise. Цепочка. Duda.Ml1986@gmail.com Events/DOM/Window 11 12.02.2019 11:38
DLE загрузка изображений через дополнительное поле armn555 Общие вопросы Javascript 1 23.08.2017 10:17
DLE загрузка изображений через дополнительное поле armn555 Элементы интерфейса 0 18.08.2017 11:08
Асинхронная загрузка изображений InTheTT AJAX и COMET 4 22.10.2011 15:51
Массовая загрузка изображений ybiza AJAX и COMET 3 15.05.2011 23:02