Performance test of jQuery.proxy()

Based on some user defined parameters the performance of jQuery.proxy and an anonymous function is measured and compared.

HTML

<script src="https://cdnjs.cloudflare.com/ajax/libs/crypto-js/3.1.2/components/core-min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/crypto-js/3.1.2/components/x64-core.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/crypto-js/3.1.2/components/sha3-min.js"></script>
<h1>Test parameters</h1>
<table>
    <tr>
        <td><label for="num-of-proxies">Number of proxies</label></td>
        <td><input type="text" name="num-of-proxies" value="100" /></td>
    </tr>
    <tr>
        <td><label for="num-of-invokations">Number of invokations per proxy</label></td>
        <td><input type="text" name="num-of-invokations-per-proxy" value="10" /></td>
    </tr>
    <tr>
        <td><label for="num-of-iterations">Number of iterations inside called function</label></td>
        <td><input type="text" name="num-of-iterations" value="10" /></td>
    </tr>
</table>
<button id="start-test">Start</button>
<button id="stop-test" disabled="disabled">Stop</button>
<h1>Results</h1>
<h2>Anonymous function</h2>
<table>
    <tr>
        <td>Number of runs</td>
        <td><span id="num-of-runs-anonym"></span></td>
    </tr>
    <tr>
        <td>Average result (millies)</td>
        <td><span id="result-anonym"></span></td>
    </tr>
</table>
<h2>jQuery proxy</h2>
<table>
    <tr>
        <td>Number of runs</td>
        <td><span id="num-of-runs-proxy"></span></td>
    </tr>
    <tr>
        <td>Average result (millies)</td>
        <td><span id="result-proxy"></span></td>
    </tr>
</table>
<h2>Comparison</h2>
<table>
    <tr>
        <td>Anonymous better than proxy (millies):</td>
        <td><span id="anonymous-better-than-proxy-abs"></span></td>
    </tr>
    <tr>
        <td>Anonymous better than proxy (%):</td>
        <td><span id="anonymous-better-than-proxy-rel"></span></td>
    </tr>
    <tr>
        <td>Proxy worse than anonymous (%):</td>
        <td><span id="proxy-worse-than-anonymous-rel"></span></td>
    </tr>
</table>

CoffeeScript

class TestApp
    
    constructor: ->
        $('#start-test').on 'click', $.proxy @startTest, @
        $('#stop-test').on 'click', $.proxy @stopTest, @
        
    startTest: ->
        numberOfProxies = $('input[name=num-of-proxies]').val();
        numberOfInvokationsPerProxy = $('input[name=num-of-invokations-per-proxy]').val();
        numOfIterations = $('input[name=num-of-iterations]').val();
        @testController = new TestController(numberOfProxies, numberOfInvokationsPerProxy, numOfIterations, @doSomething, $.proxy(@updateAnonymousTestResult, @), $.proxy(@updateProxyTestResult, @))
        @testController.start()
        $('#start-test').prop 'disabled', true
        $('#stop-test').prop 'disabled', false

    updateAnonymousTestResult: (numOfRuns, result) ->
        @lastResultAnonymous = result
        $('#num-of-runs-anonym').html numOfRuns
        $('#result-anonym').html result
        @updateComparison()
        
    updateProxyTestResult: (numOfRuns, result) ->
        @lastResultProxy = result
        $('#num-of-runs-proxy').html numOfRuns
        $('#result-proxy').html result
        @updateComparison()
        
    updateComparison: ->
        return unless @lastResultAnonymous || @lastResultProxy
        diff = @lastResultProxy - @lastResultAnonymous
        $('#anonymous-better-than-proxy-abs').html(diff)
        $('#anonymous-better-than-proxy-rel').html(100 * diff / @lastResultProxy)
        $('#proxy-worse-than-anonymous-rel').html(-100 * diff / @lastResultAnonymous)

    stopTest: ->
        @testController.stop()
        $('#start-test').prop 'disabled', false
        $('#stop-test').prop 'disabled', true
        
    doSomething: ->
        hash = CryptoJS.SHA3("Message")

class TestController
    
    constructor: (@numberOfProxies, @numberOfInvokationsPerProxy, @numOfIterations, @referenceFunction, @resultCallbackAnonym, @resultCallbackProxy) ->
    
    start: ->
        @nextTest = 0 #round robin, 0 = anonym, 1 = proxy
      ...