Есть ли способ дать 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);
})();
Таким образом, следующее обновление будет происходить только после завершения текущего, браузер будет перерисовываться только после завершения функции обновления, так что если ваша функция принимаеточень долго рассчитывать обновление, оно будет зависать / зависать.