jQuery event delegation (v66)

Revision 66 of this benchmark created on


Description

Comparing performance of adding .click() to 100 table cells vs using .on() to listen for click events bubbling up the DOM tree.

Then actually handling clicks to the first td

Preparation HTML

<table>
  <tr>
    <td>
    </td>
    <td>
    </td>
    <td>
    </td>
    <td>
    </td>
    <td>
    </td>
    <td>
    </td>
    <td>
    </td>
    <td>
    </td>
    <td>
    </td>
    <td>
    </td>
  </tr>
  <tr>
    <td>
    </td>
    <td>
    </td>
    <td>
    </td>
    <td>
    </td>
    <td>
    </td>
    <td>
    </td>
    <td>
    </td>
    <td>
    </td>
    <td>
    </td>
    <td>
    </td>
  </tr>
  <tr>
    <td>
    </td>
    <td>
    </td>
    <td>
    </td>
    <td>
    </td>
    <td>
    </td>
    <td>
    </td>
    <td>
    </td>
    <td>
    </td>
    <td>
    </td>
    <td>
    </td>
  </tr>
  <tr>
    <td>
    </td>
    <td>
    </td>
    <td>
    </td>
    <td>
    </td>
    <td>
    </td>
    <td>
    </td>
    <td>
    </td>
    <td>
    </td>
    <td>
    </td>
    <td>
    </td>
  </tr>
  <tr>
    <td>
    </td>
    <td>
    </td>
    <td>
    </td>
    <td>
    </td>
    <td>
    </td>
    <td>
    </td>
    <td>
    </td>
    <td>
    </td>
    <td>
    </td>
    <td>
    </td>
  </tr>
  <tr>
    <td>
    </td>
    <td>
    </td>
    <td>
    </td>
    <td>
    </td>
    <td>
    </td>
    <td>
    </td>
    <td>
    </td>
    <td>
    </td>
    <td>
    </td>
    <td>
    </td>
  </tr>
  <tr>
    <td>
    </td>
    <td>
    </td>
    <td>
    </td>
    <td>
    </td>
    <td>
    </td>
    <td>
    </td>
    <td>
    </td>
    <td>
    </td>
    <td>
    </td>
    <td>
    </td>
  </tr>
  <tr>
    <td>
    </td>
    <td>
    </td>
    <td>
    </td>
    <td>
    </td>
    <td>
    </td>
    <td>
    </td>
    <td>
    </td>
    <td>
    </td>
    <td>
    </td>
    <td>
    </td>
  </tr>
  <tr>
    <td>
    </td>
    <td>
    </td>
    <td>
    </td>
    <td>
    </td>
    <td>
    </td>
    <td>
    </td>
    <td>
    </td>
    <td>
    </td>
    <td>
    </td>
    <td>
    </td>
  </tr>
  <tr>
    <td>
    </td>
    <td>
    </td>
    <td>
    </td>
    <td>
    </td>
    <td>
    </td>
    <td>
    </td>
    <td>
    </td>
    <td>
    </td>
    <td>
    </td>
    <td>
    </td>
  </tr>
</table>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js">
</script>

Test runner

Ready to run.

Testing in
TestOps/sec
no delegation
$('table').find('td').on('click', function() {
  $(this).toggleClass('active');
});

$($('table').find('td')[0]).trigger('click');
$($('table').find('td')[0]).trigger('click');
$($('table').find('td')[0]).trigger('click');
$($('table').find('td')[0]).trigger('click');
$($('table').find('td')[0]).trigger('click');
$($('table').find('td')[0]).trigger('click'); 
$($('table').find('td')[0]).trigger('click'); 
$($('table').find('td')[0]).trigger('click');
$($('table').find('td')[0]).trigger('click');
$($('table').find('td')[0]).trigger('click');
 
ready
with delegation
$('table').on('click', 'td', function() {
  $(this).toggleClass('active');
});
$($('table').find('td')[0]).trigger('click');
$($('table').find('td')[0]).trigger('click');
$($('table').find('td')[0]).trigger('click');
$($('table').find('td')[0]).trigger('click');
$($('table').find('td')[0]).trigger('click');
$($('table').find('td')[0]).trigger('click'); 
$($('table').find('td')[0]).trigger('click'); 
$($('table').find('td')[0]).trigger('click');
$($('table').find('td')[0]).trigger('click');
$($('table').find('td')[0]).trigger('click');
ready
with doc delegation
$(document).on('click', 'td', function() {
  $(this).toggleClass('active');
});
$($('table').find('td')[0]).trigger('click');
$($('table').find('td')[0]).trigger('click');
$($('table').find('td')[0]).trigger('click');
$($('table').find('td')[0]).trigger('click');
$($('table').find('td')[0]).trigger('click');
$($('table').find('td')[0]).trigger('click'); 
$($('table').find('td')[0]).trigger('click'); 
$($('table').find('td')[0]).trigger('click');
$($('table').find('td')[0]).trigger('click');
$($('table').find('td')[0]).trigger('click');
ready
with doc and sizzle
$(document).on('click', 'td table', function() {
  $(this).toggleClass('active');
});
$($('table').find('td')[0]).trigger('click');
$($('table').find('td')[0]).trigger('click');
$($('table').find('td')[0]).trigger('click');
$($('table').find('td')[0]).trigger('click');
$($('table').find('td')[0]).trigger('click');
$($('table').find('td')[0]).trigger('click'); 
$($('table').find('td')[0]).trigger('click'); 
$($('table').find('td')[0]).trigger('click');
$($('table').find('td')[0]).trigger('click');
$($('table').find('td')[0]).trigger('click');
ready
with doc and sizzle
$(document).on('click', 'table td', function() {
  $(this).toggleClass('active');
});
$($('table').find('td')[0]).trigger('click');
$($('table').find('td')[0]).trigger('click');
$($('table').find('td')[0]).trigger('click');
$($('table').find('td')[0]).trigger('click');
$($('table').find('td')[0]).trigger('click');
$($('table').find('td')[0]).trigger('click'); 
$($('table').find('td')[0]).trigger('click'); 
$($('table').find('td')[0]).trigger('click');
$($('table').find('td')[0]).trigger('click');
$($('table').find('td')[0]).trigger('click');
ready

Revisions

You can edit these tests or add more tests to this page by appending /edit to the URL.