Jquery Selector Cache v3 (v4)

Revision 4 of this benchmark created on


Preparation HTML

<script src="https://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js"></script>
<script src="https://rawgit.com/farzher/jQuery-Selector-Cache/master/jquery.$$.min.js"></script>
<script>
/* jQache - BSD 3-Clause License - See LICENSE */
(function(b){b._jqache={};b._assigned=[];b._jqns=[];b._jqnsAssigned=[];b.q=function(a,c){return"undefined"!==typeof b._jqache[a]&&!("undefined"!==typeof c&&c)?b._jqache[a]:"undefined"!==typeof b._assigned[a]?b._jqache[a]=b(b._assigned[a]):b._jqache[a]=b(a)};b.q.assign=function(a){if("undefined"===typeof a.selector)return!1;"undefined"===typeof a.name&&(a.name=a.selector);a=b.extend({},{interval:0,namespace:void 0},a);if("undefined"===typeof a.namespace)return b._jqache[a.name]=b(a.selector),b._assigned[a.name]= a.selector,0<a.interval&&window.setInterval(function(){b._jqache[a.name]=b(a.selector)},1E3*a.interval),b._jqache[a.name];b._jqache[a.namespace]="undefined"!==typeof b._jqache[a.namespace]?b._jqache[a.namespace]:[];b._jqache[a.namespace][a.name]=b(a.selector);b._jqns[a.namespace]="undefined"!==typeof b._jqns[a.namespace]?b._jqns[a.namespace]:[];b._jqns[a.namespace].push(a.name);b._jqnsAssigned[a.namespace]="undefined"!==typeof b._jqnsAssigned[a.namespace]?b._jqnsAssigned[a.namespace]:[];b._jqnsAssigned[a.namespace][a.name]= a.selector;0<a.interval&&window.setInterval(function(){b._jqache[a.namespace][a.name]=b(a.selector)},1E3*a.interval);"function"!==typeof b.q[a.namespace]&&(b.q[a.namespace]=function(c,d){if("undefined"!==typeof c){d="undefined"!==typeof d?d:!1;if("undefined"!==typeof b._jqache[a.namespace][c]&&!d)return b._jqache[a.namespace][c];if("undefined"!==typeof b._jqache[a.namespace][c]&&d)return b._jqache[a.namespace][c]=b(b._jqnsAssigned[a.namespace][c])}else{var f=[],e;for(e in b._jqache[a.namespace])b._jqache[a.namespace].hasOwnProperty(e)&& f.push(b.q[a.namespace](e)[0]);return b(f)}})};b.q.clear=function(a){"undefined"===typeof a?b.each(b._jqache,function(a){"undefined"===typeof b._jqns[a]?b.q(a,!0):b.q.clear(a)}):b.each(b._jqns[a],function(c,d){b.q[a](d,!0)})}})(jQuery);</script>
<div id="container" style="display: none;">
  <ul>
    <li>
      1
    </li>
    <li class="target">
      2
    </li>
    <li id="target">
      3
    </li>
  </ul>
</div>

Test runner

Ready to run.

Testing in
TestOps/sec
jQuery with no cache
$('#target').css('border', '1px solid red');
$('#container .target').css('border', '1px solid red');
$('li.target').css('border', '1px solid red');
$('.target').css('border', '1px solid red');
$('#container ul li.target').css('border', '1px solid red');
$('ul li.target').css('border', '1px solid red');
$('div#container ul li.target').css('border', '1px solid red');
$('li#target').css('border', '1px solid red');
ready
Selector Cache Plugin
$$('#target').css('border', '1px solid red');
$$('#container .target').css('border', '1px solid red');
$$('li.target').css('border', '1px solid red');
$$('.target').css('border', '1px solid red');
$$('#container ul li.target').css('border', '1px solid red');
$$('ul li.target').css('border', '1px solid red');
$$('div#container ul li.target').css('border', '1px solid red');
$$('li#target').css('border', '1px solid red');
ready
jQache
$.q('#target').css('border', '1px solid red');
$.q('#container .target').css('border', '1px solid red');
$.q('li.target').css('border', '1px solid red');
$.q('.target').css('border', '1px solid red');
$.q('#container ul li.target').css('border', '1px solid red');
$.q('ul li.target').css('border', '1px solid red');
$.q('div#container ul li.target').css('border', '1px solid red');
$.q('li#target').css('border', '1px solid red');
ready

Revisions

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