ну setInterval и setTimeout
а чем он плох? Стартует в отдельном потоке и крутится себе там - хорошо)
собственно, как еще отмерить точное число секунд?
Можно, конечно, реагировать на запрос на сервер. Но тогда нужно обеспечить равномерное распределение запросов (setInterval =) )