Показать сообщение отдельно
  #19 (permalink)  
Старый 16.08.2023, 17:49
Аватар для voraa
Профессор
Отправить личное сообщение для voraa Посмотреть профиль Найти все сообщения от voraa
 
Регистрация: 03.02.2020
Сообщений: 2,743

Сообщение от rgl
А что если для моей задачи достаточно, скажем, 50 ms? По производительности никакого проигрыша, наоборот, в случае requestAnimationFrame мне нужно делать лишние действия - решать уже пора или еще нет.
Если ваша задача занимает 50 мс, то обновление кадра произойдет через 50мс. Движок не прерывает выполнение задачи для визуализации очередного кадра. Есть четкий цикл выполнения
- Выполнение задачи,
- выполнение микрозадач,
-Если подошло время обновления кадра, то
- выполнение функции из requestAnimationFrame
- перерасчет стилей и компоновка
- визуализация кадра.

Под задачей понимается выполнение обработчиков событий и таймеров
Микрозадачи - выполнение функций исполненных промисов и обсерверов.
И пока задача не будет полностью выполнена, микрозадачи не начнут выполняться. Пока задачи и микрозадачи не будут исполнены, никаких действий по визуализации кадра не будет.

И, кстати, setInterval (f, 4) - не означает выполнить через 4 мс. Это означает поставить в очередь задач через 4 мс. Если в очереди уже есть задачи, которые в сумме выполняются 50мс, то значит функция будет выполнена через 50мс.

Последний раз редактировалось voraa, 16.08.2023 в 17:58.
Ответить с цитированием