Faça com que o AngularJS pule a execução de um loop digest se $ http.get () não resultar em novos dados

Atualmente, estou pesquisando o servidor para verificar se há novos dados e, em seguida, atualize o modelo em um aplicativo AngularJS de acordo. Ele é aproximadamente o que estou fazendo:

setInterval(function () {
    $http.get('data.json').then(function (result) {
        if (result.data.length > 0) {
          // if data, update model here
        } else {
          // nothing has changed, but AngularJS will still start the digest cycle
        }
    });
}, 5000);

Isso funciona bem, mas a maioria das solicitações não resultará em novos dados ou alterações de dados, mas o serviço $ http realmente não sabe / se importa e ainda acionará um ciclo de resumo. Eu sinto que isso é desnecessário (já que o ciclo de digestão é uma das operações mais pesadas do aplicativo).Ainda existe alguma maneira de usar $ http, mas de alguma forma pular o resumo se nada mudou?

Uma solução seria não usar $ http, mas jQuery e, em seguida, chamar $ apply para informar a Angular que o modelo foi alterado:

setInterval(function () {
    $.get('data.json', function (dataList) {
        if (dataList.length > 0) {
            // if data, update model
            $scope.value = dataList[0].value + ' ' + new Date();

            // notify angular manually that the model has changed.
            $rootScope.$apply();
        }
    });
}, 5000);

Embora isso pareça funcionar, não tenho certeza de que seja uma boa ideia. Eu ainda gostaria de usar Angular puro, se possível.

Alguém tem alguma sugestão de melhorias para a abordagem acima ou uma solução mais elegante inteiramente?

P.S. O motivo pelo qual estou usando setInterval em vez de $ timeout é porque $ timeout também acionaria um ciclo de resumo que seria desnecessário nesse caso e aumentaria apenas o "problema".

questionAnswers(3)

yourAnswerToTheQuestion