https://github.com/Grimshire/choochoo.js

choochoo.js — это библиотека синхронизации, которая позволяет выполнять определенные функции в течение определенного периода времени и игнорировать все другие функции в очереди. Эта логика позволяет приложениям с задержкой или ресурсоемким процессором работать должным образом, позволяя графическому интерфейсу продолжать работать в JS. Кроме того, эта логика фактически представляет собой цикл и может использоваться для управления играми, особенно играми, требующими работы в сети. Я открыт для комментариев, жалоб и крутых идей. Библиотека доступна для вашего использования. Я только прошу, чтобы никто не брал на себя ответственность за эту оригинальную работу.

choochoo.js работает, создавая временной интервал, который позволяет выполнять функции в пределах этого временного интервала и игнорирует все, что не прибыло вовремя (отсюда и метафора поезд/билет/пассажир). Например, скажем, за последнюю секунду два события были запущены по 17 раз каждое (например, игрок продвигает спрайт своего персонажа, удерживая нажатыми клавиши «вперед» и «влево»). Однако мы хотим инициировать только то, что произошло в течение, скажем, сотой, десятой или половины секунды, и отбросить все остальное, чтобы вместо 17 событий мы могли сократить их до нескольких.

В традиционном алгоритме очереди, если задержка возникает где-то в нашей сети или при обработке нашей программы, наш ввод от пользователя может быть задержан, пока другие события пытаются завершить синхронизацию. Результирующая резервная копия в нашей очереди может привести либо к длительному выполнению более ненужных входных данных, либо к внезапному наплыву выполнений, либо к тому и другому. choochoo.js избавляет нас от этой проблемы, устанавливая временные метки для каждого ввода по мере их поступления и проверяя эти временные метки, когда пришло время выполнить позже.