Почему задача обратного вызова requestAnimationFrame занимает так много времени? - PullRequest
0 голосов
/ 11 ноября 2019

Я играю в игру и не могу достичь скорости 60 кадров в секунду, несмотря на то, что логика / рендеринг игры находятся в рамках необходимого бюджетаТипичный бюджет для 60 кадров в секунду составляет ~ 10-12 мс из-за перегрузки браузера. Если вы посмотрите на этот снимок экрана, задача, отвечающая за выполнение обратного вызова rAF, чрезмерно длиннее самого обратного вызова.

frame performance

Код довольно прост,зацикливание более 100 элементов, которые рисуют шестиугольные плитки на холсте, используя CanvasRenderingContext2D. Я исключил все вызовы для сохранения / восстановления для перф.

Если кто-то может объяснить, почему время между маленьким фиолетовым срезом Update Layer Tree и зеленым срезом в конце задания Composite Layers принимает такоедолго, это поможет. Или, если у кого-то есть какие-либо советы / приемы для работы с rAF.

Теория, которую я имел, состоит в том, что я каким-то образом держусь за ссылку в обратном вызове rAF, и это заставляет его ждать ??

Репо здесь: https://github.com/LudicGames/arce

Обновление: Вот еще один скриншот кадра со строкой графического процессора. Строка графического процессора показывает большое использование, но, кажется, нет никакого способа узнать что такое это использование. Предположительно рендеринг контекста, который я только что написал, но почему так долго?

Вы можете попробовать запустить представление здесь http://arce.io.

frame timing

...