При написании анимации JavaScript вы, конечно, создаете цикл, используя setInterval (или повторяющийся setTimeout). Но какая самая лучшая задержка для использования в вызове setInterval/setTimeout?
На странице jQuery API для функции .animate() пользователь "fbogner" говорит:
Просто, если кому-то интересно: анимация "отображается" с использованием setInterval с временем, равным 13 мс. Это довольно быстро! Максимально возможный интервал Chrome составляет около 10 мс. Все остальные "образцы" браузера составляют около 20-30 мс.
Любая идея, как jQuery решил использовать этот конкретный номер?
Началась награда. Я надеюсь, что кто-то, кто знает исходный код Chromium или Firefox, может предоставить некоторые твердые факты, которые могли бы поддержать решение определенной частоты кадров. Или, возможно, список анимаций (или фреймворков) и их задержки. Я считаю, что это создает интересную возможность провести небольшое исследование.
Интересно - я просто нашел время, чтобы посмотреть источник Google Pac-Man, чтобы посмотреть, что они сделали. Они устанавливают массив возможных FPS (90, 45, 30), начинаются с первого, а затем каждый кадр проверяет" медлительность" кадра (количество кадров превысило его выделенное время). Если медленность превышает 50 мс 20 раз, частота кадров уменьшается до следующего в списке (90 → 45, 45 → 30). Похоже, что частота кадров никогда не поднимается вверх, по-видимому, потому, что игра настолько недолговечна, что было бы нецелесообразно ее кодировать.
О, и задержка setInterval, конечно, установлена равной 1000/частота кадров. Фактически, они используют setInterval и не повторяются setTimeouts.
Я думаю, что эта динамическая функция частоты кадров довольно аккуратная!