Чем лучше реализовывать частые постоянные вычисления?

1,00
р.
Необходимо выполнять определенный код 30-40 раз в секунду. Возможные задержки реализации надо учитывать, как и вариант, что код будет слишком тяжелым, чтобы исполнить за указанный участок времени.
Для отрисовки ввели window.requestAnimationFrame, а что ввели для вычислений?
Пользоваться setTimeout с Date.getNow() для определения времени, затраченного на выполнение кода - идея не очень. Раньше задержка setTimeout была 3-4мс, сейчас уменьшили до 0-2. Но все-равно, все задается в миллисекундах и погрешность довольно высока.
Ввели Promises - для другого, но я видел где-то безумную реализацию таймера на них.
Ввели Web Workers - по идее, то что надо - вычисления в отдельном потоке, без замедления основной страницы. У них там, вроде-бы, сложности с взаимодействием со страницей, но, по сути, это не особо то и нужно в большинстве случаев.
Добавили window.performance.now(), да и вообще время с микросекундами, что прекрасно, но реализацию высокоточного таймера на микросекундах я так и не увидел.
В общем, что использовать, для, грубо говоря, игры?

Ответ
Вам могут помочь underscore функции Throttle и Debounce
Я пользуюсь ими в проектах с requestAnimationFrame для снижения нагрузок при частом вычислении значений, которые обновляются реже, чем смена кадров.
Реализация функций прекрасно описана и прокомментирована в исходниках undersocre