Uma chamada de função 'setTimeout' recursiva acabará com o JS Engine?

Digamos que eu tenha alguns dados que eu preciso obter do servidor a cada 10 segundos. Eu teria uma função que obtém os dados via AJAX e, em seguida, chame setTimeout para chamar esta função novamente:

function GetData(){
   $.ajax({
       url: "data.json",
       dataType: "json",
       success: function(data){
         // do somthing with the data

         setTimeout(GetData, 10000);
      },
      error: function(){
         setTimeout(GetData, 10000);
      }
   });
}

e alguém deixar a página da Web aberta o dia inteiro, poderá receber milhares de chamadas de função recursiva

Não quero usar setInterval porque isso não leva em consideração o atraso da rede. Se a rede estiver ocupada e levar 15 segundos para processar a solicitação, não quero perguntar novamente antes de obter o tempo limite do AJAX.

Qual é a melhor maneira de lidar com uma função que precisa ser chamada periodicamente?

questionAnswers(1)

yourAnswerToTheQuestion