Вызов setInterval поместит вашу функцию в очередь обратного вызова для таймера, но не гарантированно достигнут интервал, который вы укажете с большой точностью.
Каждая реализация движка JS в каждом браузере варьируется в зависимости от того, как он реализует таймеры, но большинство из них, вероятно, будут иметь своего рода пул обратных вызовов таймера, что означает, что трудно предсказать точное изменение между желаемым интервалом и фактическим интервалом между вызовами вашей функции обратного вызова..
И разрешение ухудшается, когда вы опускаетесь до уровня в десятки миллисекунд.
Таким образом, вы действительно не можете полагаться на то, что сумма интервалов будет соответствовать желаемому времени.
Про ваш рендер это странно.Кажется, у вас есть 2 рендера, которые перекрывают друг друга, но в вашем коде я не нахожу доказательств этого.
Если вы предоставите рабочий фрагмент, воспроизводящий проблему, я могу быть более точным.