requestAnimationFrame () и условия гонки - PullRequest
0 голосов
/ 30 мая 2019

requestAnimationFrame кажется все менее и менее полезным, когда речь идет о крупномасштабных манипуляциях с DOM.

У меня есть приложение SPA, которое направляет контент HTML во время навигации по сайту, и это приводит к замене основного элемента в теле другим основным элементом. После его замены должны быть запущены различные процедуры для редактирования HTML, добавления прослушивателей событий и т. Д.

Хром жалуется на то, что принудительный рефлекс мешает процессу. Я много читал литературу по rAF и разбираюсь в методах отделения измерений от мутаций и т. Д. И пытался реализовать это в сочетании с вложенными rAF.

Основная проблема заключается в том, что результаты подпрограмм, инкапсулированных в rAF, могут быть необходимы в последующем блоке кода вне rAF, и невозможно вложить каждую последующую процедуру во внутренний rAF в манере русской куклы.

Было бы гораздо полезнее, если бы на тех операциях, которые приводят к измерению DOM или мутации, мы могли бы перенести операцию и все, что следует за ней, вперед к началу следующего кадра анимации. Там действительно нет другого решения, которое я вижу для этого. (Если последующие операции не могут быть сдвинуты, то они могут выполняться до завершения операций в rAF, и поэтому значения, необходимые для последующих операций, недоступны.)

(Я экспериментировал с созданием пользовательского события в конце операций внутри rAF и с последующим началом кода при обнаружении этого события, но это просто воссоздает проблему русской куклы с еще большим количеством шагов ... вздох .)

Кто-нибудь знает метод решения этой проблемы или это безнадежное дело?

(Как я могу пометить Пола Айриша или других членов команды Chrome, чтобы прокомментировать это?)

...