Если действительно сам алгоритм правильный, и всё ломается из-за каких-то сторонних эффектов, то всё уже сложнее. Если например вы считаете, что сторонние скрипты сбрасывают таймауты, то можно попробовать декорировать clear* и посмотреть действительно ли какой-то скрипт их вызывает для массового сброса:
(() => {
[ 'clearInterval', 'clearTimeout' ].forEach(method_name => {
const original_method = window[ method_name ];
window[ method_name ] = function() {
console.log(`method ${ method_name } is called with arguments:`, arguments)
return original_method.apply(this, arguments)
}
})
})()