Возможности Javascript: скорость самоуправления? - PullRequest
0 голосов
/ 27 сентября 2018

Фон

Я не могу понять, как правильно задать этот вопрос, но вот мой лучший выстрел.

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

Вопрос

  • Есть ли лучший способ задать этот вопрос?Любой местный язык, который я должен был использовать?

  • Этот вопрос является широким?Существуют ли несколько способов решения этой проблемы?

  • Если этот вопрос не слишком широк, каковы решения (ы), если таковые имеются?

1 Ответ

0 голосов
/ 27 сентября 2018

Есть ли способ дать Javascript возможность управлять собственной скоростью?

Нет.Javascript будет работать как можно быстрее, и когда браузер захочет его запустить, вы не сможете изменить способ «как быстро он работает».Если JS-код выполняется, браузер блокируется, что означает, что:

  while(true) {
    document.body.textContent = new Date();
  }

приведет к аварийному завершению работы браузера вместо отображения текущего времени.

В основном это будет выбор его фреймаОцените динамически.

Это совсем другое.Браузер рисует все, что вы ему даете (например, холст), и перерисовывает это примерно со скоростью 60 кадров в секунду.Внутри JS вы можете запланировать небольшую задачу, которая выполняется каждые несколько миллисекунд и обновляет холст, а затем браузер выполнит ее для вас.Например:

 setInterval(function update() {
   document.body.textContent = new Date();
 }, 100);

Он никогда не будет запускать больше, чем может обработать браузер, в идеале - чуть меньше.Анимации будут рассчитываться по текущему времени и динамически увеличиваться на основе этого текущего времени.

То, где приходит requestAnimationFrame. То есть API-интерфейс браузера, который выполнит переданный обратный вызов перед следующим повторным отображением,примерно 60 кадров в секунду, вы должны установить его рекурсивно:

 (function update() {
    document.body.textContent = new Date();
    requestAnimationFrame(update);
 })();

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...