<div ng-repeat="item in items | filter:search | orderBy:'created_at'">
<div class="item">
<ul ng-class="{active: hovered === true}"
ng-mousenter="hovered = true"
ng-mouseleave="hovered = false">
<li ng-repeat="good in item.goods"
ng-mouseenter="showTooltip()"
ng-mouseleave="hideToolTip()">
{{ good.name }} {{ good.price | currency }}
</li>
</ul>
</div>
</div>
$scope.$apply (starts off at the $rootScope)
$scope.$digest (starts off at the current $scope)
built in directives or services like ng-click or $http which use $scope.$apply
Limit your watchers
Limit $digest calls
Don't ng-overdue it
Use jqLite/jq for DOM events
Use ng-repeat responsibly, can exponentially increase $digest times
Avoid filters in ng-repeat or keep them under 1ms
if you're filters take more than 1ms, it won't scale
- mcFrosty