Я пытаюсь создать плавный цикл javascript для анимации обоев на 60 кадров в секунду. Я заметил, что сборщик мусора запускает и добавляет переменное ненулевое время в рамки анимации. Я начал с отслеживания распределения в моем коде, а затем изолировал цикл. Я использовал requestAnimationFrame
и обнаружил, что в якобы "пустой" петле. Он по-прежнему вызывает распределение каждой итерации и запускает сборщик мусора. Разочарочно это, похоже, происходит и в других механизмах цикла setInterval
и setTimeout
.
Ниже я собрал несколько jsfiddles и скриншотов, демонстрирующих образец "пустые циклы". Все образцы составляют от ~ 5 секунд.
В этот момент я ищу лучшее решение для минимизации сбора мусора. Из приведенных ниже образцов выглядит так: requestAnimationFrame - худший вариант в этом отношении.
requestAnimationFrame
https://jsfiddle.net/kevzettler/e8stfjx9/
var frame = function(){
window.requestAnimationFrame(frame);
};
window.requestAnimationFrame(frame);
setInterval
https://jsfiddle.net/kevzettler/p5LbL1am/
var frame = function(){
//literally nothing
};
window.setInterval(frame, 0);
SetTimeout
https://jsfiddle.net/kevzettler/9gcs6gqp/
var frame = function(){
window.setTimeout(frame, 0);
}
window.setTimeout(frame, 0);