Вообще я бы Вам посоветовал использовать limitTo (
https://docs.angularjs.org/api/ng/filter/limitTo) и Queue для добавления элементов.
Что-то вроде (если я правильно понял задачу):
<div ng-repeat="item in news | limitTo:maxLength"> ... </div>
$scope.maxLength = 20;
socket.on('news', function (data) {
$scope.news.unshift(data); // засовываем данные
if ($scope.news.length > $scope.maxLength) { // удаляем ненужное если значение превысило лимит
$scope.news.slice($scope.maxLength, $scope.news.length - 1);
}
});
И по поводу Вашего вопроса - ангуляр вероятно не будет два раза перерисовывать дом дерево, он это наверянка сделает в следующем цикле $digest один раз.