JSFiddle - React, Tailwind, and code Playground
HTML
<script src="//cdnjs.cloudflare.com/ajax/libs/angular.js/1.2.5/angular.js"></script>
<link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/3.0.3/css/bootstrap.min.css">
<div ng-controller="tableTest">
Digest time : <span id="time">?</span>
<button>Update</button>
<br/>
<table class="table table-striped">
<tbody>
<tr ng-repeat="row in rows track by $index">
<td ng-repeat="cell in row.cells track by $index">
{{cell.txt}}
</td>
</tr>
</tbody>
</table>
</div>
CoffeeScript
moo = angular.module 'moo', []
COLUMNS_LENGTH = 5
ROWS_LENGTH = 200
moo.controller 'tableTest', ($scope) ->
$scope.rows = []
update = ->
rand = Math.floor Math.random() * 5000
$scope.rows.length = 0
for i in [0...ROWS_LENGTH]
$scope.rows.push
id : i
cells: (id:"#{i}-#{j}", txt:"cell #{rand} | #{j+1}, #{i+1}" for j in [0...COLUMNS_LENGTH])
update()
document.getElementsByTagName('button')[0].addEventListener 'click', ->
update()
now = Date.now()
$scope.$digest()
document.getElementById('time').innerHTML = "#{Date.now()-now}ms"
angular.bootstrap document, ['moo']