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']